1

Python を使用して、Excel 2007 のワークブックに対して次の操作を実行できるようにする必要があります。

  1. 行を削除する
  2. ワークシートの並べ替え
  3. 列から個別の値を取得する

openpyxlを調べています。ただし、機能が制限されているようです。

上記のタスクを実行できるライブラリをお勧めできますか?

4

1 に答える 1

7

これはWindows ベースのソリューションにすぎないことをお知らせすることから始めたいと思います。ただし、Windows を使用している場合は、ここにあるWin32Comを使用することをお勧めします。このモジュールは、任意の Microsoft Office アプリケーション (Excel を含む) への Python プログラムによるアクセスを提供し、VBA で使用されるのと同じメソッドの多くを使用します。通常、VBA で何かを行う方法をマクロに記録 (またはメモリから呼び出し) し、Python で同じ関数を使用します。

まず、Excel に接続して、例として最初のシートにアクセスします。

#First we need to access the module that lets us connect to Excel
import win32com.client 

# Next we want to create a variable that represents Excel
app = win32com.client.Dispatch("Excel.Application")   

# Lastly we will assume that the workbook is active and get the first sheet
wbk = app.ActiveWorkbook
sheet = wbk.Sheets(1)

この時点で、使用する Excel ワークシートを表すsheetという名前の変数があります。もちろん、シートにアクセスするには複数の方法があります。これは通常、非常に直感的であるため、Excel で win32com を使用する方法をデモする方法です。

ここで、最初のシートに次の値があると仮定し、質問に答える方法を 1 つずつ説明します。

     A    
1   "d"
2   "c"
3   "b"
4   "a"
5   "c"

行の削除: アクティブなシートの最初の行を削除するとします。

sheet.Rows(1).Delete()

これにより、次が作成されます。

    A
1   "c"
2   "b"
3   "a"
4   "c"

次に、セルを昇順で並べ替えます (ただし、値を python に抽出し、リスト内で並べ替えを行い、値を送り返すことをお勧めします)

rang = sheet.Range("A1","A4")
sheet.Sort.SetRange(rang)
sheet.Sort.Apply()

これにより、次が作成されます。

    A
1   "a"
2   "b"
3   "c"
4   "c"

そして、列から個別の値を取得します。ここで重要なのは、セルから値を抽出する方法です。sheet.Range("A1","A4")を使用して一度に多数のセルを選択するか、sheet.Cells(row,col) を使用してセルごとに反復処理して値にアクセスできます。Range は桁違いに高速ですが、Cells はデバッグが少し簡単です。

#Get a list of all Values using Range
valLstRange = [val[0] for val in sheet.Range("A1","A4").Value]

#Get a list of all Values using Cells
valLstCells = [sheet.Cells(row,1).Value for row in range(1,4)]

#valLstCells and valLstRange both = ["a","b","c","c"]

最後に、ワークブックを保存する必要がありましたが、次の方法でこれを行うことができます。

wbk.SaveAs("C:/savedWorkbook.xlsx")

そして、あなたは完了です!

COMについて

VBA、.NET、VBscript、またはその他の言語を使用して Excel を操作したことがある場合、これらの Excel メソッドの多くは同じように見えます。これは、Microsoft が提供する同じライブラリをすべて使用しているためです。このライブラリは、言語にとらわれないプログラマーに API を提供する Microsoft の方法である COM を使用します。COM 自体は古いテクノロジであり、デバッグが難しい場合があります。Python と COM の詳細については、Mark Hammond によるPython Programming on Win32を強くお勧めします。彼は、公式の .msi インストーラーで Windows に Python をインストールした後、大声で叫ぶ男です。

WIN32COM の代替手段

また、ほとんどの状況で COM よりも高速で、あらゆる OS (Mac、Linux、Windows など) で動作する素晴らしいオープン ソースの代替手段がいくつかあることも指摘する必要があります。これらのツールはすべて、.xlsx を構成する zip ファイルを解析します。.xlsx ファイルが .zip であることを知らなかった場合は、拡張子を .zip に変更するだけで、内容を調べることができます (人生で少なくとも 1 回は興味深いことです)。これらのうち 、パフォーマンスが重要なサーバーで Excel ファイルの解析と作成に使用したOpenpyxlをお勧めします。サーバー アクティビティに win32com を使用しないでください。win32com は、リークの可能性があるインスタンスごとに、excel.exe のプロセス外インスタンスを開くためです。

おすすめ

個々のデータ セット (アナリスト、金融サービス、研究者、会計士、事業運営など) と密接に連携し、データ ディスカバリー アクティビティを実行しているユーザーには、開いているワークブックでうまく機能するため、win32com をお勧めします。ただし、小さなフットプリントで非常に大規模なタスクを実行する必要がある開発者またはユーザー、または非常に大規模な操作または処理を並行して実行する必要がある場合は、openpyxl などのパッケージを使用する 必要があります。

于 2012-09-07T20:44:23.303 に答える