すべてのプログラミング言語は、操作Excelに遭遇します!この記事では主に、PythonがExcelで動作するときにセルをマージする方法について説明します。
目次
エフェクト画像
使用した方法
完全なコード
1
エフェクト画像
2
使用した方法
PythonでExcelを操作するためのライブラリはたくさんありますが、今回はxlsxwriterを使用してExcelを記述します。 Pythonバージョン3.6。
xlsxwriterはpipを使用して直接インストールできます。複数のシートを含めることができる新しいExcelを作成します。プログラムでは、WindowsでExcelを操作するのと同じように、特定のワークシートを操作する必要があります。
add_ワークシートシートを追加
add_formatは、centered、leftなどのスタイルを追加します。
書き込みデータの行を書き込みます
merge_range('A1:A7')セルを結合します,A2-A7
set_columnは、columnの幅などを設定します。
3
完全なコード
import os
import xlsxwriter
def get_history():
# write excel,construct dict
filename ='333.xlsx'
# 結果ファイルを削除する
if(os.path.isfile(filename)):
os.remove(filename)
list ={}
# ディクショナリをpythonディクショナリに埋め込むことができなくなったことに注意してください。
list['name1']=[]
list['name1'].append({'title':'title-1-1','comments':[{'content':'comments-name-1-1','created_at':'2020-04-13 12:17:10'},{'content':'comments-name-1-2','created_at':'2020-04-13 12:17:10'}]})
list['name1'].append({'title':'title-1-2','comments':[{'content':'comments-name-1-2','created_at':'2020-04-13 12:17:10'},{'content':'comments-name-1-3','created_at':'2020-04-13 12:17:10'}]})
list['name2']=[]
list['name2'].append({'title':'title-2-1','comments':[{'content':'comments-name-2-1','created_at':'2020-04-13 12:17:10'},{'content':'comments-name-2-2','created_at':'2020-04-13 12:17:10'},{'content':'comments-name-2-3','created_at':'2020-04-13 12:17:10'}]})
list['name3']=[]
list['name3'].append({'title':'title-3-1','comments':[{'content':'comments-name-3-1','created_at':'2020-04-13 12:17:10'}]})write_to_excel(filename,list)
def write_to_excel(output,list):
workbook = xlsxwriter.Workbook(output)
# define sheet name
sheetName ='History and Comment'
worksheet_s = workbook.add_worksheet(sheetName)
# セルのスタイルを設定する
header = workbook.add_format({'bg_color':'#F7F7F7','color':'black','align':'center','valign':'top','border':1})
merge_format = workbook.add_format({'bold': True,'border':6,'align':'center', #水平方向に中央に配置
' valign':'vcenter', #垂直方向の中央
' fg_color':'#D7E4BC', #カラーフィル
})
bold_cell = workbook.add_format({'bold': True,'align':'left','valign':'top','text_wrap': True,'border':1})
cell = workbook.add_format({'align':'left','valign':'top','text_wrap': True,'border':1})
# 以下は他のスタイルです
bold_header = workbook.add_format({'bold': True,'bg_color':'#F7F7F7','color':'black','align':'center','valign':'top','border':1})
cell_center = workbook.add_format({'align':'center','valign':'top','border':1})
title = workbook.add_format({'bold': True,'font_size':14,'align':'center','valign':'vcenter'})
# 題名
header_define =['Name','Titile','Commit Date','Comments']for i inrange(0,len(header_define)):
worksheet_s.write(0, i, header_define[i], header)
a_col_width =50
b_col_width =50
c_col_width =50
d_col_width =50
# add data into the table
data_row =1
data_row_2 =1
data_row_1 =1for one_name in list.keys():
# 最初に3列目と4列目を書く
for one_history in list[one_name]:print(one_history)for one_comment in one_history['comments']:
worksheet_s.write_string(data_row,2, one_comment['created_at'], bold_cell)
worksheet_s.write_string(data_row,3, one_comment['content'], cell)
data_row = data_row+1
# 2列目を書く
historys_len =len(one_history['comments'])if historys_len ==1:
worksheet_s.write_string(data_row_2,1, one_history['title'], bold_cell)
data_row_2 = data_row_2 +1else:print('B'+str(data_row_2)+':B'+str(data_row_2+historys_len))
worksheet_s.merge_range('B'+str(data_row_2+1)+':B'+str(data_row_2+historys_len), one_history['title'], merge_format)
data_row_2 = data_row_2+historys_len
# 最初の列を書く
if data_row_2 - data_row_1 ==1:
worksheet_s.write_string(data_row_1,0, one_name, bold_cell)else:
worksheet_s.merge_range('A'+str(data_row_1 +1)+':A'+str(data_row_2),one_name, merge_format)
data_row_1 = data_row_2
worksheet_s.set_column('A:A', a_col_width)
worksheet_s.set_column('B:B', b_col_width)
worksheet_s.set_column('C:C', c_col_width)
worksheet_s.set_column('D:D', d_col_width)
workbook.close()
# xlsx_data = output.getvalue()
# return xlsx_data
def test():
excle1 = xlsxwriter.Workbook("test.xlsx")
worksheet = excle1.add_worksheet()
worksheet.write("A1","hello world")
excle1.close()if __name__ =='__main__':get_history()
END
Recommended Posts