10

ヘッダーでインポートした Win32COM クライアントを介してリストを Excel にエクスポートしようとしています。私が作成したオブジェクトは以下のようにコーディングされていますが、各値をスプレッドシートの独自の行にエクスポートできないようです。私が良いポインタを得ることができれば(Pythonをあきらめること以外に!! :D)、私はそれを感謝します.

class XcelExport():
    def excel(self):
        app = 'Excel'
        xl = win32.gencache.EnsureDispatch('%s.Application' % app)
        ss = xl.Workbooks.Open(r'C:\MyFile.xls')
        sh = ss.ActiveSheet
        xl.Visible = True
        sleep(.1)  
        sh.Cells(1,1).Value = 'Export-to-%s : Items' % app
        sleep(.1)
        for i in EventTableRFT:
            sh.Range("A").Value = i 
        sh.Cells(i+2,1).Value = "End of the List!"

xprt = XcelExport()
xprt.excel()
4

3 に答える 3

20

あなたは私の答え/コメントが好きだったようだったので、ここに適切な答えがあります:

Python Excelには、必要なものがほぼすべて揃っています。より統合されたものが必要であるが制限されているように思われる場合は、IronSpreadがあります。XLRDとXLWTは優れたパッケージですが、*。xlsxファイルをサポートしていません。IronSpreadはWindowsのみであり、'07および'10バージョンのExcelのみをサポートします。それぞれに注意点があります。結局、両方を使用できます(* .xlsxとして編集し、*。xlsとして保存します(大きな* .xlsファイルで速度の問題が発生した人がいましたが、私のスクリプトはそのことから200MBのテキストを1のように書き込みました分。))。

ああ、そして私は間違いなくxlrd / xlwtのセルタイプなどの取得などの興味深い機能のドキュメントを読む(スキムする)でしょう。それが短く、実験の学習曲線を節約できるという理由だけで、それは価値があります。

xlwtの超短い例:

import xlwt
from tempfile import TemporaryFile
book = xlwt.Workbook()
sheet1 = book.add_sheet('sheet1')

supersecretdata = [34,123,4,1234,12,34,12,41,234,123,4,123,1,45123,5,43,61,3,56]

for i,e in enumerate(supersecretdata):
    sheet1.write(i,1,e)

name = "random.xls"
book.save(name)
book.save(TemporaryFile())

xlrdの超短い例:

import xlrd
from xlrd import open_workbook
book = open_workbook('random.xls')
sheet1 = book.sheet_by_index(0)
data = []

for i in xrange(sheet1.nrows):
    data.append(sheet1.cell(i,1).value)
于 2012-08-02T13:38:26.233 に答える
1

Range のセル行番号が欠落しており、ループの反復ごとにセル行をインクリメントする必要があります。

sh.Range("A1").Offset(0,x).Value = i

この変更は機能するはずです。

class XcelExport():
    def excel(self):
        app = 'Excel'
        xl = win32.gencache.EnsureDispatch('%s.Application' % app)
        ss = xl.Workbooks.Open(r'C:\MyFile.xls')
        sh = ss.ActiveSheet
        xl.Visible = True
        sleep(.1)  
        sh.Cells(1,1).Value = 'Export-to-%s : Items' % app
        sleep(.1)
        x=0
        for i in EventTableRFT:
            sh.Range("A1").Offset(0,x).Value = i #You need to increment the cell row
            x+=1
        sh.Cells(i+2,1).Value = "End of the List!"

xprt = XcelExport()
xprt.excel()
于 2012-08-01T20:45:27.850 に答える