私はPythonが初めてです。プログラムからスプレッドシートにデータを書き込む必要があります。私はオンラインで検索しましたが、たくさんのパッケージが利用できるようです(xlwt、XlsXcessive、openpyxl)。他の人は.csvファイルに書き込むことを提案します(CSVを使ったことがなく、それが何であるかを本当に理解していない)。
プログラムはとても簡単です。 2つのリスト(float)と3つの変数(文字列)があります。 2つのリストの長さはわかりませんし、おそらく同じ長さにはならないでしょう。
下の図のようにレイアウトを設定します。
ピンク色の列は最初のリストの値を持ち、緑色の列は2番目のリストの値を持ちます。
それではこれを行うための最良の方法は何ですか?
P.S私はWindows 7を実行していますが、必ずしもこのプログラムを実行しているコンピュータにOfficeをインストールする必要はありません。
import xlwt
x=1
y=2
z=3
list1=[2.34,4.346,4.234]
book = xlwt.Workbook(encoding="utf-8")
sheet1 = book.add_sheet("Sheet 1")
sheet1.write(0, 0, "Display")
sheet1.write(1, 0, "Dominance")
sheet1.write(2, 0, "Test")
sheet1.write(0, 1, x)
sheet1.write(1, 1, y)
sheet1.write(2, 1, z)
sheet1.write(4, 0, "Stimulus Time")
sheet1.write(4, 1, "Reaction Time")
i=4
for n in list1:
i = i+1
sheet1.write(i, 0, n)
book.save("trial.xls")
私はあなたのすべての提案を使ってこれを書いた。それは仕事を成し遂げますが、それはわずかに改善することができます。
Forループで作成されたセル(list1の値)を科学的または数値としてフォーマットする方法を教えてください。
値を切り捨てたくありません。プログラムで使用される実際の値は、10進数の後に約10桁です。
import xlwt
def output(filename, sheet, list1, list2, x, y, z):
book = xlwt.Workbook()
sh = book.add_sheet(sheet)
variables = [x, y, z]
x_desc = 'Display'
y_desc = 'Dominance'
z_desc = 'Test'
desc = [x_desc, y_desc, z_desc]
col1_name = 'Stimulus Time'
col2_name = 'Reaction Time'
#You may need to group the variables together
#for n, (v_desc, v) in enumerate(Zip(desc, variables)):
for n, v_desc, v in enumerate(Zip(desc, variables)):
sh.write(n, 0, v_desc)
sh.write(n, 1, v)
n+=1
sh.write(n, 0, col1_name)
sh.write(n, 1, col2_name)
for m, e1 in enumerate(list1, n+1):
sh.write(m, 0, e1)
for m, e2 in enumerate(list2, n+1):
sh.write(m, 1, e2)
book.save(filename)
より詳しい説明は: https://github.com/python-Excel
パンダ から DataFrame.to_Excel を使用します。 Pandasはあなたがあなたのデータを機能的に豊富なデータ構造で表現することを可能にし、あなたに Excelファイルを同様に読ませます 。
まずデータをDataFrameに変換してから、次のようにExcelファイルに保存する必要があります。
In [1]: from pandas import DataFrame
In [2]: l1 = [1,2,3,4]
In [3]: l2 = [1,2,3,4]
In [3]: df = DataFrame({'Stimulus Time': l1, 'Reaction Time': l2})
In [4]: df
Out[4]:
Reaction Time Stimulus Time
0 1 1
1 2 2
2 3 3
3 4 4
In [5]: df.to_Excel('test.xlsx', sheet_name='sheet1', index=False)
そして出てくるExcelファイルは次のようになります。
両方のリストは同じ長さである必要があることに注意してください。そうしないとパンダは不平を言うでしょう。これを解決するには、欠損値をすべてNone
に置き換えます。
xlrd/xlwt(標準):Pythonは標準ライブラリにこの機能を持っていませんが、 xlrd/xlwt をExcelファイルを読み書きするための「標準的な」方法。ワークブックの作成、シートの追加、データ/式の作成、およびセルの書式設定は非常に簡単です。あなたがこれらすべてを必要とするなら、あなたはこのライブラリで最も成功するかもしれません。私はあなたが代わりにopenpyxlを選ぶことができると思います、そしてそれは非常に似ているでしょう、しかし私はそれを使いませんでした。
Xlwtを使用してセルをフォーマットするには、XFStyle
を定義し、シートに書き込むときにスタイルを含めます。 これは のような多くの数値フォーマットを使った例です。下記のコード例を参照してください。
Tablib(強力で直感的): Tablib は、より強力で直感的な表形式のデータを扱うためのライブラリです。それはcsv、json、そしてyamlのような他のフォーマットと同様に複数のシートでExcelワークブックを書くことができます。 (背景色のように)フォーマットされたセルが必要ない場合は、このライブラリを使用することをお勧めします。これにより、長期的に見てより遠くへ行くことができます。
csv(簡単):コンピュータ上のファイルはテキストまたはバイナリのいずれかです。テキストファイルは、改行やタブなどの特別なものも含めて単なる文字であり、どこでも簡単に開くことができます(例:メモ帳、Webブラウザ、Office製品)。 csvファイルは、特定の方法でフォーマットされたテキストファイルです。各行は、コンマで区切られた値のリストです。 Pythonプログラムはテキストを簡単に読み書きできるので、csvファイルはあなたのpythonプログラムからExcel(あるいは他のpythonプログラム)へデータをエクスポートするための最も簡単で最速の方法です。
Excelファイルはバイナリ形式で、ファイル形式を知っている特別なライブラリが必要です。そのため、読み書きするには、python用の追加ライブラリ、またはMicrosoft Excel、Gnumeric、LibreOfficeなどの特別なプログラムが必要です。
import xlwt
style = xlwt.XFStyle()
style.num_format_str = '0.00E+00'
...
for i,n in enumerate(list1):
sheet1.write(i, 0, n, fmt)
CSVは、コンマ区切り値を表します。 CSVはテキストファイルのようなもので、 。CSV拡張子 を追加するだけで作成できます。
例えば、このコードを書く:
f = open('example.csv','w')
f.write("display,variable x")
f.close()
このファイルはExcelで開くことができます。
import xlsxwriter
# Create an new Excel file and add a worksheet.
workbook = xlsxwriter.Workbook('demo.xlsx')
worksheet = workbook.add_worksheet()
# Widen the first column to make the text clearer.
worksheet.set_column('A:A', 20)
# Add a bold format to use to highlight cells.
bold = workbook.add_format({'bold': True})
# Write some simple text.
worksheet.write('A1', 'Hello')
# Text with formatting.
worksheet.write('A2', 'World', bold)
# Write some numbers, with row/column notation.
worksheet.write(2, 0, 123)
worksheet.write(3, 0, 123.456)
# Insert an image.
worksheet.insert_image('B5', 'logo.png')
workbook.close()
次のライブラリも見てください。
xlwings - ワークシートやチャートを操作するだけでなく、Pythonからスプレッドシートにデータを出し入れするためのものです。
ExcelPython - VBAの代わりにPythonでユーザー定義関数(UDF)およびマクロを記述するためのExcelアドイン
私はいくつかのPython用のExcelモジュールを調べて、 openpyxl が最良であることを発見しました。
無料の本「Pythonで退屈なものを自動化する 」にopenpyxl の章があります。詳細は をご覧ください。 Docs サイトopenpyxlを使うためにOfficeやExcelをインストールする必要はありません。
あなたのプログラムは次のようになります。
import openpyxl
wb = openpyxl.load_workbook('example.xlsx')
sheet = wb.get_sheet_by_name('Sheet1')
stimulusTimes = [1, 2, 3]
reactionTimes = [2.3, 5.1, 7.0]
for i in range(len(stimulusTimes)):
sheet['A' + str(i + 6)].value = stimulusTimes[i]
sheet['B' + str(i + 6)].value = reactionTimes[i]
wb.save('example.xlsx')
OpenPyxl
はExcel 2010のxlsx/xlsmファイルを読み書きするために作られた、とても素敵なライブラリです。
https://openpyxl.readthedocs.io/en/stable
もう1つの答え は、それを参照して、分割されていない関数(get_sheet_by_name
)を使用しています。これはそれなしでそれを行う方法です:
import openpyxl
wbkName = 'New.xlsx' #The file should be created before running the code.
wbk = openpyxl.load_workbook(wbkName)
wks = wbk['test1']
someValue = 1337
wks.cell(row=10, column=1).value = someValue
wbk.save(wbkName)
wbk.close
正確な数字をインポートする最も簡単な方法は、あなたのl1
とl2
の数字の後に小数点を追加することです。 Pythonはこの小数点をユーザーからの指示として解釈して、正確な数値を含めます。小数点以下を制限する必要がある場合は、出力を制限するprintコマンドを作成できます。これは次のような簡単なものです。
print variable_example[:13]
データに小数点以下2桁の整数があると仮定して、小数点第10位に制限します。
XlsxWriter に基づいて、 hfexcel ヒューマンフレンドリーなオブジェクト指向pythonライブラリを試すことができます。
from hfexcel import HFExcel
hf_workbook = HFExcel.hf_workbook('example.xlsx', set_default_styles=False)
hf_workbook.add_style(
"headline",
{
"bold": 1,
"font_size": 14,
"font": "Arial",
"align": "center"
}
)
sheet1 = hf_workbook.add_sheet("sheet1", name="Example Sheet 1")
column1, _ = sheet1.add_column('headline', name='Column 1', width=2)
column1.add_row(data='Column 1 Row 1')
column1.add_row(data='Column 1 Row 2')
column2, _ = sheet1.add_column(name='Column 2')
column2.add_row(data='Column 2 Row 1')
column2.add_row(data='Column 2 Row 2')
column3, _ = sheet1.add_column(name='Column 3')
column3.add_row(data='Column 3 Row 1')
column3.add_row(data='Column 3 Row 2')
# In order to get a row with coordinates:
# sheet[column_index][row_index] => row
print(sheet1[1][1].data)
assert(sheet1[1][1].data == 'Column 2 Row 2')
hf_workbook.save()