5

私は非常に大きな Excel ファイルを持っており、約 20,000 行を削除する必要があります。単純な条件を満たしていることを条件としており、フィルターを使用するときに Excel でそのような複雑な範囲を削除することはできません。条件は次のとおりです。

最初の列に値 X が含まれている場合、行全体を削除できる必要があります。

Python と xlwt を使用してこれを自動化しようとしていますが、どこから始めればよいかよくわかりません。私を始めるためにいくつかのコードスニペットを探しています...そこにある助けに感謝します!

4

6 に答える 6

12

削除しないでください。必要なものをコピーするだけです。

  1. 元のファイルを読む
  2. 新しいファイルを開く
  3. 元のファイルの行を反復処理します(行の最初の列に値Xが含まれていない場合は、この行を新しいファイルに追加します)
  4. 両方のファイルを閉じる
  5. 新しいファイルの名前を元のファイルに変更します
于 2011-04-12T12:31:39.863 に答える
4

この種の楽しみのために COM オブジェクトを使用するのが好きです。

import win32com.client
from win32com.client import constants

f = r"h:\Python\Examples\test.xls"
DELETE_THIS = "X"

exc = win32com.client.gencache.EnsureDispatch("Excel.Application")
exc.Visible = 1
exc.Workbooks.Open(Filename=f)

row = 1
while True:
    exc.Range("B%d" % row).Select()
    data = exc.ActiveCell.FormulaR1C1
    exc.Range("A%d" % row).Select()
    condition = exc.ActiveCell.FormulaR1C1

    if data == '':
        break
    elif condition == DELETE_THIS:
        exc.Rows("%d:%d" % (row, row)).Select()
        exc.Selection.Delete(Shift=constants.xlUp)
    else:
        row += 1

# Before
# 
#      a
#      b
# X    c
#      d
#      e
# X    d
#      g
#        

# After
#
#      a
#      b
#      d
#      e
#      g

Visual Basic が嫌いなので、通常は Excel マクロのスニペットを記録し、それらを Python で接着します:-D。

于 2011-04-12T13:40:19.450 に答える
2

csvリーダーを使用してみることができます。

http://docs.python.org/library/csv.html

于 2011-04-12T12:32:51.223 に答える
0

データを削除する必要がある場合 (行を「取り除く」、つまり行をシフトするのではなく)、私のモジュール PyWorkbooks を使用してみてください。ここで最新バージョンを入手できます。

https://sourceforge.net/projects/pyworkbooks/

使用方法を説明する PDF チュートリアルがあります。ハッピーコーディング!

于 2011-04-12T16:38:39.923 に答える
-1

Pandasパッケージを使用してこれを達成しました....

import pandas as pd

#Read from Excel
xl= pd.ExcelFile("test.xls")

#Parsing Excel Sheet to DataFrame
dfs = xl.parse(xl.sheet_names[0])

#Update DataFrame as per requirement
#(Here Removing the row from DataFrame having blank value in "Name" column)

dfs = dfs[dfs['Name'] != '']

#Updating the excel sheet with the updated DataFrame

dfs.to_excel("test.xls",sheet_name='Sheet1',index=False)
于 2016-01-06T06:00:48.153 に答える