web-dev-qa-db-ja.com

PythonリストをExcelにエクスポート

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

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()
8
manengstudent

あなたは私の答え/コメントを好きに思われたので、ここに適切な答えがあります:

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)
18
Logan

範囲内のセル行番号が両方とも不足しているため、ループを繰り返すたびにセル行をインクリメントする必要があります。

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()
1
eabraham