
Python是一种代表简单主义思想的语言。Python提供了高效的高级数据结构,还能简单有效地面向对象编程。Python语法和动态类型,以及解释型语言的本质,使它成为多数平台上写脚本和快速开发应用的编程语言。为方便日常工作,如下整理出常用模板,以备不时之需。
class
# importing the module import pandas as pd # Define the path and worksheet name to which source and target files are saved # ============================================================================ # dfn=>data_fram_name # ssn=>sour_sheet_name # dsn=>dest_sheet_name # suc=>sour_use_cols # dsr=>dest_startrow # dsc=>dest_startcool # ============================================================================ loc = "D:\\py\\folder\\" sourFile = loc+"p.xlsx" destFile = loc+"gongyu.xlsx" ssn_21 = "公寓IPTV" ssn_22 = "公寓UPS" ssn_23 = "公寓综合布线" ssn_24 = "公寓监控" ssn_25 = "公寓门禁" ssn_26 = "公寓网络" ssn_27 = "公寓扩声" ssn_28 = "公寓讨论" # ============================================================================= dsn_21 = "公寓IPTV" dsn_22 = "公寓UPS" dsn_23 = "公寓布线" dsn_24 = "公寓监控" dsn_25 = "公寓门禁" dsn_26 = "公寓网络" dsn_27 = "公寓扩声" dsn_28 = "公寓讨论" # a class # Import data from the Excel Sheet data source class isusee: writer = pd.ExcelWriter(destFile, engine="xlsxwriter") def append_data(self, dfn, ssn, suc, dsn, dsc): # Create a Pandas Excel writer using XlsxWriter as the engine. dfn = pd.read_excel(sourFile, sheet_name=ssn, header=1, usecols=suc) # Write a dataframe to the worksheet. dfn.to_excel(self.writer, sheet_name=dsn, startrow=2, startcol=dsc, na_rep='无', index=False, header=False) self.dfn = dfn self.dsn = dsn def style_table(self): workbook = self.writer.book worksheet = self.writer.sheets[self.dsn] self.worksheet = worksheet # Add a number format for cells with num. num_format = workbook.add_format( {'num_format': '0', 'valign': 'vcenter'}) # Add a number format for cells with money. money_format = workbook.add_format( {'num_format': '¥#,##0.00', 'valign': 'vcenter'}) # Add a text format for cells with text. text_format = workbook.add_format( {'num_format': '@', 'valign': 'vcenter', 'text_wrap': True}) text_format.set_font_size(10) # Add a number format for cells with money. money_format = workbook.add_format( {'num_format': '#,##0.00', 'valign': 'vcenter'}) # Adding formats for header row. fmt_header = workbook.add_format({ 'bold': True, 'text_wrap': True, 'valign': 'top', 'fg_color': '#5DADE2', 'font_color': '#FFFFFF', 'border': 1}) # Setting the zoom worksheet.set_zoom(100) # https://xlsxwriter.readthedocs.io/example_tables.html # https://xlsxwriter.readthedocs.io/working_with_tables.html#tables # Prime Cost : 原价|成本价 # unit price : 单价 total_pc = '=PRODUCT([@数量]*[@成本])' total_up = '=PRODUCT([@数量]*[@单价])' # Some sample data for the table. data = [] # Options to use in the table. # User defined functions or formulas aren't supported. # options里不支持例如对列宽,单元格样式的设置 options = {'data': data, 'columns': [ {'header': '序号'}, {'header': '名称'}, {'header': '型号'}, {'header': '品牌'}, {'header': '数量'}, {'header': '成本'}, {'header': '单价'}, {'header': '单位'}, {'header': '成本小计', 'formula': total_pc}, {'header': '单价小计', 'formula': total_up}, {'header': '参数说明'} ]} (max_row, max_col) = self.dfn.shape # print("A2:"f"K{max_row}") mx_row = max_row + 2 # Add a table to the worksheet. worksheet.add_table("A2:"f"K{mx_row}", options) # 冻结标题行,第一个参数 2 冻结指第二行,第二个参数 1 指冻结第一列 worksheet.freeze_panes(2, 1) # Create a format to use in the merged range. merge_format = workbook.add_format({ 'bold': 1, 'border': 1, 'align': 'center', 'valign': 'vcenter', 'fg_color': 'yellow'}) # Create a format to use in the merged range. # https://xlsxwriter.readthedocs.io/working_with_pandas.html worksheet.merge_range('A1:K1', self.dsn, merge_format) # Set the columns widths. worksheet.set_column('A:A', 6, text_format) worksheet.set_column('B:B', 22, text_format) worksheet.set_column('C:C', 11.25, text_format) worksheet.set_column('D:D', 6, text_format) worksheet.set_column('E:E', 6, num_format) worksheet.set_column('F:F', 10, money_format) worksheet.set_column('G:G', 10, money_format) worksheet.set_column('H:H', 6, text_format) worksheet.set_column('I:I', 9.88, money_format) worksheet.set_column('J:J', 9.88, money_format) worksheet.set_column('K:K', 49, text_format) def sheet_print(self): # ===================================================================== # # This program shows several examples of how to set up headers and # footers with XlsxWriter. # # The control characters used in the header/footer strings are: # # Control Category Description # ======= ======== =========== # &L Justification Left # &C Center # &R Right # # &P Information Page number # &N Total number of pages # &D Date # &T Time # &F File name # &A Worksheet name # # &fontsize Font Font size # &"font,style" Font name and style # &U Single underline # &E Double underline # &S Strikethrough # &X Superscript # &Y Subscript # # &[Picture] Images Image placeholder # &G Same as &[Picture] # # && Miscellaneous Literal ampersand & # # ===================================================================== # # 将工作表的打印页面的方向设置为横向 self.worksheet.set_landscape() # 将工作表数据水平居中在打印页面的边距之间 self.worksheet.center_horizontally() # 页面边距 self.worksheet.set_margins(left=0.3, right=0.3, top=0.61, bottom=0.37) # 页眉 and 页脚 self.worksheet.set_header("", {'margin': 0.1}) self.worksheet.set_footer("", {'margin': 0.1}) # &L->left &C->center &R->right # header = '&LPage &P of &N' + '&CFilename: &F' + '&RSheetname: &A' # footer = capsheet2 + '&CPage &P of &N' + '&RCurrent DateTime: &D &T' footer = '&R:: Page &P of &N :: Print Time: &D &T' self.worksheet.set_footer(footer) # ===== class end ============================================================= # Object instantiation # ============================================================================= # 1:名称 2:型号 3:品牌 4:数量 5:成本 # 6:单价 7:单位 8:成计 9:单计 10:参数 aa = isusee() aa.append_data('dfaa_b', ssn_21, 'B', dsn_21, 1) aa.append_data('dfaa_c', ssn_21, 'C', dsn_21, 2) aa.append_data('dfaa_d', ssn_21, 'D', dsn_21, 10) aa.append_data('dfaa_e', ssn_21, 'E', dsn_21, 3) aa.append_data('dfaa_f', ssn_21, 'F', dsn_21, 7) aa.append_data('dfaa_g', ssn_21, 'G', dsn_21, 4) aa.append_data('dfaa_h', ssn_21, 'H', dsn_21, 6) aa.style_table() aa.sheet_print() # ============================================================================ # 1:名称 2:型号 3:品牌 4:数量 5:成本 # 6:单价 7:单位 8:成计 9:单计 10:参数 bb = isusee() bb.append_data('dfbb_b', ssn_22, 'B', dsn_22, 1) bb.append_data('dfbb_c', ssn_22, 'C', dsn_22, 3) bb.append_data('dfbb_d', ssn_22, 'D', dsn_22, 2) bb.append_data('dfbb_e', ssn_22, 'E', dsn_22, 7) bb.append_data('dfbb_f', ssn_22, 'F', dsn_22, 4) bb.append_data('dfbb_f', ssn_22, 'G', dsn_22, 6) bb.append_data('dfbb_i', ssn_22, 'I', dsn_22, 10) bb.style_table() bb.sheet_print() # ============================================================================ # 1:名称 2:型号 3:品牌 4:数量 5:成本 # 6:单价 7:单位 8:成计 9:单计 10:参数 cc = isusee() cc.append_data('dfcc_b', ssn_23, 'B', dsn_23, 1) cc.append_data('dfcc_c', ssn_23, 'C', dsn_23, 2) cc.append_data('dfcc_d', ssn_23, 'D', dsn_23, 3) cc.append_data('dfcc_e', ssn_23, 'E', dsn_23, 7) cc.append_data('dfcc_f', ssn_23, 'F', dsn_23, 4) cc.append_data('dfcc_g', ssn_23, 'G', dsn_23, 6) cc.append_data('dfcc_i', ssn_23, 'I', dsn_23, 10) cc.style_table() cc.sheet_print() # ============================================================================ # 1:名称 2:型号 3:品牌 4:数量 5:成本 # 6:单价 7:单位 8:成计 9:单计 10:参数 dd = isusee() dd.append_data('dfdd_b', ssn_24, 'B', dsn_24, 1) dd.append_data('dfdd_c', ssn_24, 'C', dsn_24, 2) dd.append_data('dfdd_d', ssn_24, 'D', dsn_24, 10) dd.append_data('dfdd_e', ssn_24, 'E', dsn_24, 3) dd.append_data('dfdd_f', ssn_24, 'F', dsn_24, 7) dd.append_data('dfdd_g', ssn_24, 'G', dsn_24, 4) dd.append_data('dfdd_h', ssn_24, 'H', dsn_24, 6) dd.style_table() dd.sheet_print() # ============================================================================ # 1:名称 2:型号 3:品牌 4:数量 5:成本 # 6:单价 7:单位 8:成计 9:单计 10:参数 ee = isusee() ee.append_data('dfee_c', ssn_25, 'C', dsn_25, 1) ee.append_data('dfee_d', ssn_25, 'D', dsn_25, 3) ee.append_data('dfee_e', ssn_25, 'E', dsn_25, 2) ee.append_data('dfee_f', ssn_25, 'F', dsn_25, 7) ee.append_data('dfee_g', ssn_25, 'G', dsn_25, 6) ee.append_data('dfee_h', ssn_25, 'H', dsn_25, 4) ee.append_data('dfee_j', ssn_25, 'J', dsn_25, 10) ee.style_table() ee.sheet_print() # ============================================================================ # 1:名称 2:型号 3:品牌 4:数量 5:成本 # 6:单价 7:单位 8:成计 9:单计 10:参数 ff = isusee() ff.append_data('dfff_b', ssn_26, 'B', dsn_26, 1) ff.append_data('dfff_c', ssn_26, 'C', dsn_26, 2) ff.append_data('dfff_d', ssn_26, 'D', dsn_26, 10) ff.append_data('dfff_e', ssn_26, 'E', dsn_26, 3) ff.append_data('dfff_f', ssn_26, 'F', dsn_26, 7) ff.append_data('dfff_g', ssn_26, 'G', dsn_26, 4) ff.append_data('dfff_h', ssn_26, 'H', dsn_26, 6) ff.style_table() ff.sheet_print() # ============================================================================ # 1:名称 2:型号 3:品牌 4:数量 5:成本 # 6:单价 7:单位 8:成计 9:单计 10:参数 gg = isusee() gg.append_data('dfgg_b', ssn_27, 'B', dsn_27, 1) gg.append_data('dfgg_c', ssn_27, 'C', dsn_27, 3) gg.append_data('dfgg_d', ssn_27, 'D', dsn_27, 2) gg.append_data('dfgg_e', ssn_27, 'E', dsn_27, 10) gg.append_data('dfgg_f', ssn_27, 'F', dsn_27, 4) gg.append_data('dfgg_g', ssn_27, 'G', dsn_27, 7) gg.append_data('dfgg_h', ssn_27, 'H', dsn_27, 6) gg.style_table() gg.sheet_print() # ============================================================================ # 1:名称 2:型号 3:品牌 4:数量 5:成本 # 6:单价 7:单位 8:成计 9:单计 10:参数 hh = isusee() hh.append_data('dfhh_b', ssn_28, 'B', dsn_28, 1) hh.append_data('dfhh_c', ssn_28, 'C', dsn_28, 3) hh.append_data('dfhh_d', ssn_28, 'D', dsn_28, 2) hh.append_data('dfhh_e', ssn_28, 'E', dsn_28, 10) hh.append_data('dfhh_f', ssn_28, 'F', dsn_28, 4) hh.append_data('dfhh_g', ssn_28, 'G', dsn_28, 7) hh.append_data('dfhh_h', ssn_28, 'H', dsn_28, 6) hh.style_table() hh.sheet_print() hh.writer.save() print('OK.')
# importing the module import pandas as pd # Define the path and worksheet name to which source and target files are saved # ============================================================================ # dfn=>data_fram_name # ssn=>sour_sheet_name # dsn=>dest_sheet_name # suc=>sour_use_cols # dsr=>dest_startrow # dsc=>dest_startcool # ============================================================================ loc = "D:\\py\\folder\\" sourFile = loc+"p.xlsx" destFile = loc+"destFile.xlsx" ssn_01 = "会展布线" ssn_02 = "会展机房" ssn_03 = "会展监控" ssn_04 = "会展楼控" ssn_05 = "会展照明" ssn_06 = "会展票务" ssn_07 = "会展网络" ssn_08 = "会展无线对讲" ssn_09 = "会展信息发布" ssn_10 = "会展巡更" ssn_11 = "会展公共广播" ssn_12 = "会展241人会议室" ssn_13 = "会展138会议室" ssn_14 = "会展68人视频会议室 " ssn_15 = "会展46人视频会议室 " ssn_16 = "会展18人会议室" ssn_17 = "会展多功能厅" # ============================================================================= dsn_01 = "综合布线" dsn_02 = "会展机房" dsn_03 = "会展监控" dsn_04 = "会展楼控" dsn_05 = "会展照明" dsn_06 = "会展票务" dsn_07 = "会展网络" dsn_08 = "会展对讲" dsn_09 = "会展发布" dsn_10 = "会展巡更" dsn_11 = "会展广播" dsn_12 = "会展241人会议室" dsn_13 = "会展138人会议室" dsn_14 = "会展68人视频会议室" dsn_15 = "会展46人视频会议室" dsn_16 = "会展18人会议室" dsn_17 = "会展多功能厅" # a class # Import data from the Excel Sheet data source class isusee: writer = pd.ExcelWriter(destFile, engine="xlsxwriter") def append_data(self, dfn, ssn, suc, dsn, dsc): # Create a Pandas Excel writer using XlsxWriter as the engine. dfn = pd.read_excel(sourFile, sheet_name=ssn, header=1, usecols=suc) # Write a dataframe to the worksheet. dfn.to_excel(self.writer, sheet_name=dsn, startrow=2, startcol=dsc, na_rep='无', index=False, header=False) self.dfn = dfn self.dsn = dsn def style_table(self): workbook = self.writer.book worksheet = self.writer.sheets[self.dsn] self.worksheet = worksheet # Add a number format for cells with num. num_format = workbook.add_format( {'num_format': '0', 'valign': 'vcenter'}) # Add a number format for cells with money. money_format = workbook.add_format( {'num_format': '¥#,##0.00', 'valign': 'vcenter'}) # Add a text format for cells with text. text_format = workbook.add_format( {'num_format': '@', 'valign': 'vcenter', 'text_wrap': True}) text_format.set_font_size(10) # Add a number format for cells with money. money_format = workbook.add_format( {'num_format': '#,##0.00', 'valign': 'vcenter'}) # Adding formats for header row. fmt_header = workbook.add_format({ 'bold': True, 'text_wrap': True, 'valign': 'top', 'fg_color': '#5DADE2', 'font_color': '#FFFFFF', 'border': 1}) # Setting the zoom worksheet.set_zoom(100) # https://xlsxwriter.readthedocs.io/example_tables.html # https://xlsxwriter.readthedocs.io/working_with_tables.html#tables # Prime Cost : 原价|成本价 # unit price : 单价 total_pc = '=PRODUCT([@数量]*[@成本])' total_up = '=PRODUCT([@数量]*[@单价])' # Some sample data for the table. data = [] # Options to use in the table. # User defined functions or formulas aren't supported. # options里不支持例如对列宽,单元格样式的设置 options = {'data': data, 'columns': [ {'header': '序号'}, {'header': '名称'}, {'header': '型号'}, {'header': '品牌'}, {'header': '数量'}, {'header': '成本'}, {'header': '单价'}, {'header': '单位'}, {'header': '成本小计', 'formula': total_pc}, {'header': '单价小计', 'formula': total_up}, {'header': '参数说明'} ]} (max_row, max_col) = self.dfn.shape # print("A2:"f"K{max_row}") mx_row = max_row + 2 # Add a table to the worksheet. worksheet.add_table("A2:"f"K{mx_row}", options) # 冻结标题行,第一个参数 2 冻结指第二行,第二个参数 1 指冻结第一列 worksheet.freeze_panes(2, 1) # Create a format to use in the merged range. merge_format = workbook.add_format({ 'bold': 1, 'border': 1, 'align': 'center', 'valign': 'vcenter', 'fg_color': 'yellow'}) # Create a format to use in the merged range. # https://xlsxwriter.readthedocs.io/working_with_pandas.html worksheet.merge_range('A1:K1', self.dsn, merge_format) # Set the columns widths. worksheet.set_column('A:A', 6, text_format) worksheet.set_column('B:B', 22, text_format) worksheet.set_column('C:C', 11.25, text_format) worksheet.set_column('D:D', 6, text_format) worksheet.set_column('E:E', 6, num_format) worksheet.set_column('F:F', 10, money_format) worksheet.set_column('G:G', 10, money_format) worksheet.set_column('H:H', 6, text_format) worksheet.set_column('I:I', 9.88, money_format) worksheet.set_column('J:J', 9.88, money_format) worksheet.set_column('K:K', 49, text_format) def sheet_print(self): # ===================================================================== # # This program shows several examples of how to set up headers and # footers with XlsxWriter. # # The control characters used in the header/footer strings are: # # Control Category Description # ======= ======== =========== # &L Justification Left # &C Center # &R Right # # &P Information Page number # &N Total number of pages # &D Date # &T Time # &F File name # &A Worksheet name # # &fontsize Font Font size # &"font,style" Font name and style # &U Single underline # &E Double underline # &S Strikethrough # &X Superscript # &Y Subscript # # &[Picture] Images Image placeholder # &G Same as &[Picture] # # && Miscellaneous Literal ampersand & # # ===================================================================== # # 将工作表的打印页面的方向设置为横向 self.worksheet.set_landscape() # 将工作表数据水平居中在打印页面的边距之间 self.worksheet.center_horizontally() # 页面边距 self.worksheet.set_margins(left=0.3, right=0.3, top=0.61, bottom=0.37) # 页眉 and 页脚 self.worksheet.set_header("", {'margin': 0.1}) self.worksheet.set_footer("", {'margin': 0.1}) # &L->left &C->center &R->right # header = '&LPage &P of &N' + '&CFilename: &F' + '&RSheetname: &A' # footer = capsheet2 + '&CPage &P of &N' + '&RCurrent DateTime: &D &T' footer = '&R:: Page &P of &N :: Print Time: &D &T' self.worksheet.set_footer(footer) # ===== class end ============================================================= # Object instantiation a = isusee() a.append_data('dfa_b', ssn_01, 'B', ssn_01, 1) a.append_data('dfa_c', ssn_01, 'C', ssn_01, 2) a.append_data('dfa_d', ssn_01, 'D', ssn_01, 3) a.append_data('dfa_e', ssn_01, 'E', ssn_01, 7) a.append_data('dfa_f', ssn_01, 'F', ssn_01, 4) a.append_data('dfa_g', ssn_01, 'G', ssn_01, 6) a.append_data('dfa_i', ssn_01, 'I', ssn_01, 10) a.style_table() a.sheet_print() # ============================================================================ b = isusee() b.append_data('dfb_b', ssn_02, 'B', dsn_02, 1) b.append_data('dfb_c', ssn_02, 'C', ssn_02, 3) b.append_data('dfb_d', ssn_02, 'D', ssn_02, 2) b.append_data('dfb_e', ssn_02, 'E', ssn_02, 7) b.append_data('dfb_f', ssn_02, 'F', ssn_02, 4) b.append_data('dfb_g', ssn_02, 'G', ssn_02, 6) b.append_data('dfb_i', ssn_02, 'I', ssn_02, 10) b.style_table() b.sheet_print() # ============================================================================ c = isusee() c.append_data('dfc_b', ssn_03, 'B', dsn_03, 1) c.append_data('dfc_c', ssn_03, 'C', dsn_03, 2) c.append_data('dfc_d', ssn_03, 'D', dsn_03, 10) c.append_data('dfc_e', ssn_03, 'E', dsn_03, 3) c.append_data('dfc_f', ssn_03, 'F', dsn_03, 7) c.append_data('dfc_g', ssn_03, 'G', dsn_03, 4) c.append_data('dfc_h', ssn_03, 'H', dsn_03, 6) c.style_table() c.sheet_print() # ============================================================================ d = isusee() # 1:名称 2:型号 3:品牌 4: 数量 5: 成本 6: 单价 # 7:单位 8:成计 9:单计 10:参数 d.append_data('dfd_b', ssn_04, 'B', dsn_04, 1) d.append_data('dfd_c', ssn_04, 'C', dsn_04, 3) d.append_data('dfd_d', ssn_04, 'D', dsn_04, 2) d.append_data('dfd_e', ssn_04, 'E', dsn_04, 7) d.append_data('dfd_f', ssn_04, 'F', dsn_04, 4) d.append_data('dfd_g', ssn_04, 'G', dsn_04, 6) d.append_data('dfd_i', ssn_04, 'I', dsn_04, 10) d.style_table() d.sheet_print() # ============================================================================ # 1:名称 2:型号 3:品牌 4: 数量 5: 成本 6: 单价 # 7:单位 8:成计 9:单计 10:参数 e = isusee() e.append_data('dfe_b', ssn_05, 'B', dsn_05, 1) e.append_data('dfe_c', ssn_05, 'C', dsn_05, 3) e.append_data('dfe_d', ssn_05, 'D', dsn_05, 2) e.append_data('dfe_e', ssn_05, 'E', dsn_05, 7) e.append_data('dfe_f', ssn_05, 'F', dsn_05, 4) e.append_data('dfe_g', ssn_05, 'G', dsn_05, 6) e.append_data('dfe_i', ssn_05, 'I', dsn_05, 10) e.style_table() e.sheet_print() # ============================================================================ # 1:名称 2:型号 3:品牌 4: 数量 5: 成本 6: 单价 # 7:单位 8:成计 9:单计 10:参数 f = isusee() f.append_data('dff_b', ssn_06, 'B', dsn_06, 1) f.append_data('dff_c', ssn_06, 'C', dsn_06, 7) f.append_data('dff_d', ssn_06, 'D', dsn_06, 3) f.append_data('dff_e', ssn_06, 'E', dsn_06, 2) f.append_data('dff_f', ssn_06, 'F', dsn_06, 4) f.append_data('dff_g', ssn_06, 'G', dsn_06, 6) f.append_data('dff_i', ssn_06, 'I', dsn_06, 10) f.style_table() f.sheet_print() # ============================================================================ # 1:名称 2:型号 3:品牌 4: 数量 5: 成本 6: 单价 # 7:单位 8:成计 9:单计 10:参数 g = isusee() g.append_data('dfg_b', ssn_07, 'B', dsn_07, 1) g.append_data('dfg_c', ssn_07, 'C', dsn_07, 2) g.append_data('dfg_d', ssn_07, 'D', dsn_07, 10) g.append_data('dfg_e', ssn_07, 'E', dsn_07, 3) g.append_data('dfg_f', ssn_07, 'F', dsn_07, 7) g.append_data('dfg_g', ssn_07, 'G', dsn_07, 4) g.append_data('dfg_h', ssn_07, 'H', dsn_07, 6) g.style_table() g.sheet_print() # ============================================================================ # 1:名称 2:型号 3:品牌 4: 数量 5: 成本 6: 单价 # 7:单位 8:成计 9:单计 10:参数 h = isusee() h.append_data('dfh_b', ssn_08, 'B', dsn_08, 1) h.append_data('dfh_c', ssn_08, 'C', dsn_08, 2) h.append_data('dfh_d', ssn_08, 'D', dsn_08, 3) h.append_data('dfh_e', ssn_08, 'E', dsn_08, 4) h.append_data('dfh_f', ssn_08, 'F', dsn_08, 7) h.append_data('dfh_g', ssn_08, 'G', dsn_08, 6) h.append_data('dfh_i', ssn_08, 'I', dsn_08, 10) h.style_table() h.sheet_print() # ============================================================================ # 1:名称 2:型号 3:品牌 4: 数量 5: 成本 6: 单价 # 7:单位 8:成计 9:单计 10:参数 i = isusee() i.append_data('dfi_b', ssn_09, 'B', dsn_09, 1) i.append_data('dfi_c', ssn_09, 'C', dsn_09, 7) i.append_data('dfi_d', ssn_09, 'D', dsn_09, 3) i.append_data('dfi_e', ssn_09, 'E', dsn_09, 2) i.append_data('dfi_f', ssn_09, 'F', dsn_09, 4) i.append_data('dfi_g', ssn_09, 'G', dsn_09, 6) i.append_data('dfi_i', ssn_09, 'I', dsn_09, 10) i.style_table() i.sheet_print() # ============================================================================ # 1:名称 2:型号 3:品牌 4: 数量 5: 成本 6: 单价 # 7:单位 8:成计 9:单计 10:参数 j = isusee() j.append_data('dfj_b', ssn_10, 'B', dsn_10, 1) j.append_data('dfj_c', ssn_10, 'C', dsn_10, 2) j.append_data('dfj_d', ssn_10, 'D', dsn_10, 3) j.append_data('dfj_e', ssn_10, 'E', dsn_10, 7) j.append_data('dfj_f', ssn_10, 'F', dsn_10, 4) j.append_data('dfj_g', ssn_10, 'G', dsn_10, 6) j.append_data('dfj_i', ssn_10, 'I', dsn_10, 10) j.style_table() j.sheet_print() # ============================================================================ # 1:名称 2:型号 3:品牌 4: 数量 5: 成本 6: 单价 # 7:单位 8:成计 9:单计 10:参数 k = isusee() k.append_data('dfk_b', ssn_11, 'B', dsn_11, 1) k.append_data('dfk_c', ssn_11, 'C', dsn_11, 3) k.append_data('dfk_d', ssn_11, 'D', dsn_11, 2) k.append_data('dfk_e', ssn_11, 'E', dsn_11, 4) k.append_data('dfk_f', ssn_11, 'F', dsn_11, 7) k.append_data('dfk_g', ssn_11, 'G', dsn_11, 6) k.style_table() k.sheet_print() # ============================================================================ # 1:名称 2:型号 3:品牌 4: 数量 5: 成本 6: 单价 # 7:单位 8:成计 9:单计 10:参数 l = isusee() l.append_data('dfl_b', ssn_12, 'B', dsn_12, 1) l.append_data('dfl_c', ssn_12, 'C', dsn_12, 3) l.append_data('dfl_d', ssn_12, 'D', dsn_12, 2) l.append_data('dfl_e', ssn_12, 'E', dsn_12, 10) l.append_data('dfl_f', ssn_12, 'F', dsn_12, 4) l.append_data('dfl_g', ssn_12, 'G', dsn_12, 7) l.append_data('dfl_h', ssn_12, 'H', dsn_12, 6) l.style_table() l.sheet_print() # ============================================================================ # 1:名称 2:型号 3:品牌 4: 数量 5: 成本 6: 单价 # 7:单位 8:成计 9:单计 10:参数 m = isusee() m.append_data('dfm_b', ssn_13, 'B', dsn_13, 1) m.append_data('dfm_c', ssn_13, 'C', dsn_13, 3) m.append_data('dfm_d', ssn_13, 'D', dsn_13, 2) m.append_data('dfm_e', ssn_13, 'E', dsn_13, 10) m.append_data('dfm_f', ssn_13, 'F', dsn_13, 4) m.append_data('dfm_g', ssn_13, 'G', dsn_13, 7) m.append_data('dfm_h', ssn_13, 'H', dsn_13, 6) m.style_table() m.sheet_print() # ============================================================================ # 1:名称 2:型号 3:品牌 4: 数量 5: 成本 6: 单价 # 7:单位 8:成计 9:单计 10:参数 n = isusee() n.append_data('dfn_b', ssn_14, 'B', dsn_14, 1) n.append_data('dfn_c', ssn_14, 'C', dsn_14, 3) n.append_data('dfn_d', ssn_14, 'D', dsn_14, 2) n.append_data('dfn_e', ssn_14, 'E', dsn_14, 10) n.append_data('dfn_f', ssn_14, 'F', dsn_14, 4) n.append_data('dfn_g', ssn_14, 'G', dsn_14, 7) n.append_data('dfn_h', ssn_14, 'H', dsn_14, 6) n.style_table() n.sheet_print() # ============================================================================ # 1:名称 2:型号 3:品牌 4: 数量 5: 成本 6: 单价 # 7:单位 8:成计 9:单计 10:参数 o = isusee() o.append_data('dfo_b', ssn_15, 'B', dsn_15, 1) o.append_data('dfo_c', ssn_15, 'C', dsn_15, 3) o.append_data('dfo_d', ssn_15, 'D', dsn_15, 2) o.append_data('dfo_e', ssn_15, 'E', dsn_15, 10) o.append_data('dfo_f', ssn_15, 'F', dsn_15, 4) o.append_data('dfo_g', ssn_15, 'G', dsn_15, 7) o.append_data('dfo_h', ssn_15, 'H', dsn_15, 6) o.style_table() o.sheet_print() # ============================================================================ # 1:名称 2:型号 3:品牌 4: 数量 5: 成本 6: 单价 # 7:单位 8:成计 9:单计 10:参数 p = isusee() p.append_data('dfp_b', ssn_16, 'B', dsn_16, 1) p.append_data('dfp_c', ssn_16, 'C', dsn_16, 3) p.append_data('dfp_d', ssn_16, 'D', dsn_16, 2) p.append_data('dfp_e', ssn_16, 'E', dsn_16, 10) p.append_data('dfp_f', ssn_16, 'F', dsn_16, 4) p.append_data('dfp_g', ssn_16, 'G', dsn_16, 7) p.append_data('dfp_h', ssn_16, 'H', dsn_16, 6) p.style_table() p.sheet_print() # ============================================================================ # 1:名称 2:型号 3:品牌 4: 数量 5: 成本 6: 单价 # 7:单位 8:成计 9:单计 10:参数 q = isusee() q.append_data('dfq_b', ssn_17, 'B', dsn_17, 1) q.append_data('dfq_c', ssn_17, 'C', dsn_17, 3) q.append_data('dfq_d', ssn_17, 'D', dsn_17, 2) q.append_data('dfq_e', ssn_17, 'E', dsn_17, 10) q.append_data('dfq_f', ssn_17, 'F', dsn_17, 4) q.append_data('dfq_g', ssn_17, 'G', dsn_17, 7) q.append_data('dfq_h', ssn_17, 'H', dsn_17, 6) q.style_table() q.sheet_print() q.writer.save() print('OK.')
H
import pandas as pd loc = "D:\\py\\folder\\" df_b = pd.read_excel(loc+"sourFile.xlsx", '会展布线', header=1, usecols='B') df_c = pd.read_excel(loc+"sourFile.xlsx", '会展布线', header=1, usecols='C') writer_2 = pd.ExcelWriter(loc+"1FFile.xlsx", engine="xlsxwriter") df_b.to_excel(writer_2, sheet_name="综合布线", startrow=2, startcol=1, na_rep='无', index=False, header=False) df_c.to_excel(writer_2, sheet_name="综合布线", startrow=2, startcol=3, na_rep='无', index=False, header=False) workbook_2 = writer_2.book worksheet_2 = writer_2.sheets["综合布线"] # Adding simple number format. fmt_number = workbook_2.add_format({ "num_format": "0" }) # Adding currency format fmt_currency = workbook_2.add_format({ "num_format": "$#,##0.00", "bold": False, 'text_wrap': True }) # Adding percentage format. fmt_rate = workbook_2.add_format({ "num_format": "%0.0", "bold": False }) # Add a text format for cells with text. text_format = workbook_2.add_format({'num_format': '@', 'text_wrap': True}) # Add a number format for cells with num. nums_format = workbook_2.add_format({'num_format': '#,##0'}) # Add a number format for cells with money. money_format = workbook_2.add_format({'num_format': '¥#,##0.00'}) # Add a text format for cells with text. text_format = workbook_2.add_format( {'num_format': '@', 'align': 'left', 'valign': 'vcenter', 'text_wrap': True}) # Add a number format for cells with num. nums_format = workbook_2.add_format({'num_format': '#,##0'}) # Add a number format for cells with money. money_format = workbook_2.add_format({'num_format': '¥#,##0.00'}) # Adding formats for header row. fmt_header = workbook_2.add_format({ 'bold': True, 'text_wrap': True, 'valign': 'top', 'fg_color': '#5DADE2', 'font_color': '#FFFFFF', 'border': 1}) # Setting the zoom worksheet_2.set_zoom(100) # https://xlsxwriter.readthedocs.io/example_tables.html # https://xlsxwriter.readthedocs.io/working_with_tables.html#tables # Prime Cost : 原价|成本价 # unit price : 单价 total_pc = '=PRODUCT([@数量]*[@成本])' total_up = '=PRODUCT([@数量]*[@单价])' # Some sample data for the table. data = [] # Options to use in the table. # User defined functions or formulas aren't supported. # options里不支持例如对列宽,单元格样式的设置 options = {'data': data, 'columns': [ {'header': '序号'}, {'header': '名称'}, {'header': '品牌'}, {'header': '型号'}, {'header': '数量'}, {'header': '成本'}, {'header': '单价'}, {'header': '单位'}, {'header': '成本小计', 'formula': total_pc}, {'header': '单价小计', 'formula': total_up}, {'header': '参数说明'} ]} # if '综合布线' in writer_2.book.sheetnames: # print(writer_2.book.sheetnames) # maxrow = writer_2.book['综合布线'].max_row # Add a table to the worksheet.表格区域 A2 到 K20,A1 为标头,所以,从 A2 开始为数据填充区域 # worksheet.add_table(0, 0, max_row, max_col - 1, {'columns': column_settings}) (max_row, max_col) = df_b.shape # msg['Subject'] = f"Auto Hella Restart Report {sys.argv[1]}" # print("A2:"f"K{max_row}") mx_row = max_row + 2 worksheet_2.add_table("A2:"f"K{mx_row}", options) # 冻结标题行,第一个参数 2 冻结指第二行,第二个参数 1 指冻结第一列 worksheet_2.freeze_panes(2, 1) # Create a format to use in the merged range. merge_format = workbook_2.add_format({ 'bold': 1, 'border': 1, 'align': 'center', 'valign': 'vcenter', 'fg_color': 'yellow'}) # 合并 A1 到 K1 单元格并应用 merge_format 样式作为标头用 # https://xlsxwriter.readthedocs.io/working_with_pandas.html worksheet_2.merge_range('A1:K1', '会布线....', merge_format) # worksheet_2.set_column("B:B", 12, fmt_currency) # worksheet_2.set_column("K:M", 10, fmt_currency) # worksheet_2.set_column("D:D",20,fmt_number) # worksheet_2.set_column("N:N",10,fmt_rate) # Set the columns widths. worksheet_2.set_column('A:A', 6, text_format) worksheet_2.set_column('B:B', 22, text_format) worksheet_2.set_column('C:C', 6, text_format) worksheet_2.set_column('D:D', 11.25, text_format) worksheet_2.set_column('E:E', 6, fmt_number) worksheet_2.set_column('F:F', 8, money_format) worksheet_2.set_column('G:G', 8, money_format) worksheet_2.set_column('H:H', 6, text_format) worksheet_2.set_column('I:I', 9.88, money_format) worksheet_2.set_column('J:J', 9.88, money_format) worksheet_2.set_column('K:K', 53, text_format) for col, value in enumerate(df_b.columns.values): worksheet_2.write(-1, col, value) # for col , value in enumerate(df_c.columns.values): # worksheet_2.write(0, col, value, fmt_header) writer_2.save() # https://medium.com/analytics-vidhya/exporting-a-data-frame-to-custom-formatted-excel-a82a35116e92
Function
datacleaning
# import pandas library as pd import pandas as pd # Define the path and worksheet name to which source and target files are saved sourFile = 'D:\\py\\folder\\sourFile.xlsx' saveFile = 'D:\\py\\folder\\saveFile.xlsx' # Import data from the Excel Sheet data source def datacleaning(dataframe, sour_sheet_name, sour_usecols, dest_sheet_name, dest_start_row, dest_start_col): # Create a Pandas dataframe from sourFile dataframe = pd.read_excel( sourFile, sheet_name=sour_sheet_name, header=2, usecols=sour_usecols) # Create a Pandas Excel writer # object using XlsxWriter as the engine. # # Create a Pandas Excel writer using XlsxWriter as the engine. writer_object = pd.ExcelWriter(saveFile, engine='xlsxwriter') # Write a dataframe to the worksheet. dataframe.to_excel(writer_object, sheet_name=dest_sheet_name, na_rep='无', index=False, header=False, startrow=dest_start_row, startcol=dest_start_col) workbook = writer_object.book # Create xlsxwriter worksheet object worksheet_object = writer_object.sheets[dest_sheet_name] # 将工作表的打印页面的方向设置为横向 worksheet_object.set_landscape() # 将工作表数据水平居中在打印页面的边距之间 worksheet_object.center_horizontally() # 页面边距 worksheet_object.set_margins(left=0.3, right=0.3, top=0.61, bottom=0.37) # 页眉 and 页脚 worksheet_object.set_header("", {'margin': 0.1}) worksheet_object.set_footer("", {'margin': 0.1}) # &L->left &C->center &R->right # header = '&LPage &P of &N' + '&CFilename: &F' + '&RSheetname: &A' # footer = capsheet2 + '&CPage &P of &N' + '&RCurrent DateTime: &D &T' footer = '&R:: Page &P of &N :: Print Time: &D &T' worksheet_object.set_footer(footer) # Some sample data for the table. data = [] # Options to use in the table. options = {'data': data, 'total_row': 1, 'columns': [ {'header': '序号'}, {'header': '名称'}, {'header': '品牌'}, {'header': '型号'}, {'header': '数量'}, {'header': '成本'}, {'header': '单价'}, {'header': '单位'}, {'header': '成本小计'}, {'header': '单价小计'}, {'header': '参数说明'} ]} # Add a table to the worksheet.表格区域 A2 到 K20,A1 为标头,所以,从 A2 开始为数据填充区域 worksheet_object.add_table('A2:K39', options) nums_format = workbook.add_format({'num_format': '#,##0'}) # text_format = workbook.add_format() # text_format.set_num_format('@') # @ - This is text format in excel text_format = workbook.add_format( {'num_format': '@', 'align': 'left', 'valign': 'vcenter', 'text_wrap': True}) # fmt = wb_name.add_format({'align': 'left', 'valign': 'vcenter', 'text_wrap': True}) # format1.set_num_format('@') # @ - This is text format in excel # Add a number format for cells with money. # money_format = workbook.add_format({'num_format': '#,##0;-#,##0'}) money_format = workbook.add_format({'num_format': '#,##0.00'}) # 单元格自动换行 # cell_wrap = wb_name.add_format() # cell_wrap.set_text_wrap() # Create a format to use in the merged range. merge_format = workbook.add_format({ 'bold': 1, 'border': 1, 'align': 'center', 'valign': 'vcenter', 'fg_color': 'yellow'}) # Set the columns widths. worksheet_object.set_column('A:A', 6, text_format) worksheet_object.set_column('B3:B39', 22, text_format) worksheet_object.set_column('C:C', 6, text_format) worksheet_object.set_column('D:D', 11.25, text_format) worksheet_object.set_column('E:E', 6, nums_format) worksheet_object.set_column('F:F', 8, money_format) worksheet_object.set_column('G:G', 8, money_format) worksheet_object.set_column('H:H', 6, text_format) worksheet_object.set_column('I:I', 9.88, money_format) worksheet_object.set_column('J:J', 9.88, money_format) worksheet_object.set_column('K:K', 53, text_format) # 冻结标题行,第一个参数 2 冻结指第二行,第二个参数 1 指冻结第一列 worksheet_object.freeze_panes(2, 1) # 合并 A1 到 K1 单元格并应用 merge_format 样式作为标头用 worksheet_object.merge_range('A1:K1', dest_sheet_name, merge_format) # Close the Pandas Excel writer writer_object.save() # ==================================================================================================== ** # Source sheet name ss_01 = '数据看板' ss_02 = '会展布线' # Target Sheet Name ds_01 = '数据看板' ds_02 = '会展布线' # datacleaning(dataframe, sour_sheet_name, sour_usecols, dest_sheet_name, dest_start_row, dest_start_col) datacleaning('df_b', ss_02, 'B', ds_02, 2, 1) print('Data cleansing has completed successfully.')
Functions
创建自属风格的 Excel 多表
# importing the module import xlsxwriter def sheet_page_setup(wb_obj_name): # ===================================================================== # # This program shows several examples of how to set up headers and # footers with XlsxWriter. # # The control characters used in the header/footer strings are: # # Control Category Description # ======= ======== =========== # &L Justification Left # &C Center # &R Right # # &P Information Page number # &N Total number of pages # &D Date # &T Time # &F File name # &A Worksheet name # # &fontsize Font Font size # &"font,style" Font name and style # &U Single underline # &E Double underline # &S Strikethrough # &X Superscript # &Y Subscript # # &[Picture] Images Image placeholder # &G Same as &[Picture] # # && Miscellaneous Literal ampersand & # # ===================================================================== # # 将工作表的打印页面的方向设置为横向 wb_obj_name.set_landscape() # 将工作表数据水平居中在打印页面的边距之间 wb_obj_name.center_horizontally() # 页面边距 wb_obj_name.set_margins(left=0.3, right=0.3, top=0.61, bottom=0.37) # 页眉 and 页脚 wb_obj_name.set_header("", {'margin': 0.1}) wb_obj_name.set_footer("", {'margin': 0.1}) # &L->left &C->center &R->right # header = '&LPage &P of &N' + '&CFilename: &F' + '&RSheetname: &A' # footer = capsheet2 + '&CPage &P of &N' + '&RCurrent DateTime: &D &T' footer = '&R:: Page &P of &N :: Print Time: &D &T' wb_obj_name.set_footer(footer) def sheet_table_setup(wb_obj_name, wb_name, sheet_name): # Some sample data for the table. data = [] # Options to use in the table. options = {'data': data, 'total_row': 1, 'columns': [ {'header': '序号'}, {'header': '名称'}, {'header': '品牌'}, {'header': '型号'}, {'header': '数量'}, {'header': '成本'}, {'header': '单价'}, {'header': '单位'}, {'header': '成本小计'}, {'header': '单价小计'}, {'header': '参数说明'} ]} # Add a table to the worksheet.表格区域 A2 到 K39,A1 为表头,所以,从 A2 开始为数据填充区域 wb_obj_name.add_table('A2:K39', options) nums_format = wb_name.add_format({'num_format': '#,##0'}) # text_format = workbook.add_format() # text_format.set_num_format('@') # @ - This is text format in excel text_format = wb_name.add_format({'num_format': '@', 'text_wrap':True}) # format1.set_num_format('@') # @ - This is text format in excel # Add a number format for cells with money. # money_format = workbook.add_format({'num_format': '#,##0;-#,##0'}) money_format = wb_name.add_format({'num_format': '¥#,##0.00'}) # Create a format to use in the merged range. merge_format = wb_name.add_format({ 'bold': 1, 'border': 1, 'align': 'center', 'valign': 'vcenter', 'fg_color': 'yellow'}) # Set the columns widths. wb_obj_name.set_column('A:A', 6, text_format) wb_obj_name.set_column('B:B', 22, text_format) wb_obj_name.set_column('C:C', 6, text_format) wb_obj_name.set_column('D:D', 11.25, text_format) wb_obj_name.set_column('E:E', 6, nums_format) wb_obj_name.set_column('F:F', 8, money_format) wb_obj_name.set_column('G:G', 8, money_format) wb_obj_name.set_column('H:H', 6, text_format) wb_obj_name.set_column('I:I', 9.88, money_format) wb_obj_name.set_column('J:J', 9.88, money_format) wb_obj_name.set_column('K:K', 53, text_format) # 冻结标题行,第一个参数 2 指冻结第二行,第二个参数 1 指冻结第一列 wb_obj_name.freeze_panes(2, 1) # 合并 A1 到 K1 单元格并应用 merge_format 样式作为标头用 wb_obj_name.merge_range('A1:K1', sheet_name, merge_format) # ===================================================================== sourFile = 'D:\\py\\folder\\sourFile.xlsx' saveFile = 'D:\\py\\folder\\saveFile.xlsx' cs_01 = '数据看板' cs_02 = '会展布线' cs_03 = '会展机房' cs_04 = '会展监控' cs_05 = '会展楼控' wb = xlsxwriter.Workbook(saveFile) ws_01 = wb.add_worksheet(cs_01) ws_02 = wb.add_worksheet(cs_02) sheet_page_setup(ws_02) sheet_table_setup(ws_02, wb, cs_02) ws_03 = wb.add_worksheet(cs_03) sheet_page_setup(ws_03) sheet_table_setup(ws_03, wb, cs_03) ws_04 = wb.add_worksheet(cs_04) sheet_page_setup(ws_04) sheet_table_setup(ws_04, wb, cs_04) ws_05 = wb.add_worksheet(cs_05) sheet_page_setup(ws_05) sheet_table_setup(ws_05, wb, cs_05) wb.close() print('The Excel table has been created successfully.')
Functions
根据条件提取填充数据
import os import pandas as pd from openpyxl import load_workbook def append_df_to_excel(filename, df, sheet_name='Sheet1', startrow=None, truncate_sheet=False, **to_excel_kwargs): """ Append a DataFrame [df] to existing Excel file [filename] into [sheet_name] Sheet. If [filename] doesn't exist, then this function will create it. @param filename: File path or existing ExcelWriter (Example: '/path/to/file.xlsx') @param df: DataFrame to save to workbook @param sheet_name: Name of sheet which will contain DataFrame. (default: 'Sheet1') @param startrow: upper left cell row to dump data frame. Per default (startrow=None) calculate the last row in the existing DF and write to the next row... @param truncate_sheet: truncate (remove and recreate) [sheet_name] before writing DataFrame to Excel file @param to_excel_kwargs: arguments which will be passed to `DataFrame.to_excel()` [can be a dictionary] @return: None Usage examples: # >>> append_df_to_excel('d:/temp/test.xlsx', df) # >>> append_df_to_excel('d:/temp/test.xlsx', df, header=None, index=False) # >>> append_df_to_excel('d:/temp/test.xlsx', df, sheet_name='Sheet2', index=False) # >>> append_df_to_excel('d:/temp/test.xlsx', df, sheet_name='Sheet2', index=False, startrow=25) (c) [MaxU](https://stackoverflow.com/users/5741205/maxu?tab=profile) """ # Excel file doesn't exist - saving and exiting if not os.path.isfile(filename): df.to_excel( filename, sheet_name=sheet_name, startrow=startrow if startrow is not None else 0, **to_excel_kwargs) return # ignore [engine] parameter if it was passed if 'engine' in to_excel_kwargs: to_excel_kwargs.pop('engine') writer = pd.ExcelWriter(filename, engine='openpyxl', mode='a') # try to open an existing workbook writer.book = load_workbook(filename) # get the last row in the existing Excel sheet # if it was not specified explicitly if startrow is None and sheet_name in writer.book.sheetnames: startrow = writer.book[sheet_name].max_row # truncate sheet if truncate_sheet and sheet_name in writer.book.sheetnames: # index of [sheet_name] sheet idx = writer.book.sheetnames.index(sheet_name) # remove [sheet_name] writer.book.remove(writer.book.worksheets[idx]) # create an empty sheet [sheet_name] using old index writer.book.create_sheet(sheet_name, idx) # copy existing sheets writer.sheets = {ws.title: ws for ws in writer.book.worksheets} if startrow is None: startrow = 0 # write out the new sheet df.to_excel(writer, sheet_name, startrow=startrow, **to_excel_kwargs) # save the workbook writer.save() sourFile = 'D:\\py\\folder\\sourFile.xlsx' saveFile = 'D:\\py\\folder\\saveFile.xlsx' cs_01 = '数据看板' cs_02 = '会展布线' cs_03 = '会展机房' cs_04 = '会展监控' cs_05 = '会展楼控' # 报错:Positional argument cannot appear after keyword argumentsPylance # https://stackoverflow.com/questions/9450656/positional-argument-v-s-keyword-argument # 注意在命名参数时,要在个变量前面都加上形参的名字 # python 3.8 引入了位置参数, # 位置参数、关键字参数、必需参数和可选参数经常被混淆。位置参数与必需参数不同。和关键字参数与可选参数不同。 # 位置参数是可以通过它们在函数定义中的位置来调用的参数。 # 关键字参数是可以通过名称调用的参数。 # 必需参数是必须传递给函数的参数。 # 可选参数是不能传递给函数的参数。在 python 中,可选参数是具有默认值的参数。 # 以通过/在参数列表中使用 来指定仅位置参数 # 通过使用*字符来获得仅关键字参数,可以将任意序列的位置参数或关键字参数传递给函数。 # ws_name :定义源表中数据输出的sheet表名 # heard=1 :定义源表中第一行为标头行,不做数据提取 # usecols='B' :定义源表中要输出的列 # wd_name :定义目标表中要填充数据的sheet表名 # na_rep='无' :定义目标表中的空值,以"无"填充 # index=False :无索引 # header=None :目标表不填充表头数据 # startrow :目标表填充数据从哪一行开始 # startcol :目标表填充数据从哪一列开始 def importdata(df_name, ws_name, source_select_cols, wd_name, start_row=2, start_col=1): df_name = pd.read_excel(sourFile, ws_name, header=1, usecols=source_select_cols) append_df_to_excel(saveFile, df_name, sheet_name=wd_name, na_rep='无', index=False, header=None, startrow=start_row, startcol=start_col) # 行、列的序号默认由0开始,第一行,其实下标是0,第二行,下标为1 importdata('df_b', cs_02, 'B', cs_02, 2, 1) importdata('df_c', cs_02, 'C', cs_02, 2, 3) importdata('df_d', cs_02, 'D', cs_02, 2, 2) importdata('df_e', cs_02, 'E', cs_02, 2, 7) importdata('df_f', cs_02, 'F', cs_02, 2, 4) importdata('df_g', cs_02, 'G', cs_02, 2, 6) importdata('df_i', cs_02, 'I', cs_02, 2, 10)
pandas
摘取数据
# 引入 pandas 库并别名为 pd import pandas as pd # 定义源和目标文件 sourFile = 'D:\\py\\folder\\sourFile.xlsx' saveFile = 'D:\\py\\folder\\saveFile.xlsx' # 读取sheet名为会展布线工作表 # na_rep :缺失值填充 ,可以设置为字符串,为bool值,则写入excel时改为0和1 # header :指定作为列名的行。默认0,即取第一行为列名,这里设值为1,即以第二行数据为列名,相应的,提取数据时,提取此行以下的数据;若数据不含列名,则设定 header = None df = pd.read_excel(sourFile,sheet_name = '会展布线', header = 1) # columns :选择输出的的列存入 # df.to_excel(saveFile,sheet_name = '公寓布线',na_rep = '无',index = False, header = None, columns=['设备、材料'], startrow = 1,startcol = 1, index_label='a')
多sheet合并 – 01
import pandas as pd # 合并多个 sheet data = pd.read_excel("D:\\SourceFolder\\SourceFile.xlsx", None) cols = list(data.keys()) newdata = pd.DataFrame() for i in cols: df = data[i] newdata = pd.concat([newdata.df]) newdata.to_excel( 'D:\\DestinationFolder\\DestinationFile.xlsx', index=False)
多sheet合并 – 02
首先,需要安装模块:xlrd、xlsxwriter
#python3.* pip3 install xlrd xlsxwriter
接着,创建 Python 脚本,例如创建的脚本命名为:merge.py
# -*- coding:utf-8 -*- import xlrd,xlsxwriter,os #待合并excel目标文件夹 path="C:\\Users\\52840\\Desktop\\merge" #目标excel end_xls="C:\\Users\\52840\\Desktop\\merge.xlsx" #获取目标目录中所有excel名称 def get_filenames(path): filenames = [] for i in os.walk(path): for filename in i[-1]: full_filename = os.path.join(i[0],filename) filenames.append(full_filename) return filenames #打开文件 def open_xls(file): try: fh=xlrd.open_workbook(file) return fh except Exception as e: print("open file error:"+e) #根据excel名以及子表名获取数据 def get_file_value(filename,sheetnum): rvalue=[] fh=open_xls(filename) sheet=fh.sheets()[sheetnum] row_num=sheet.nrows for rownum in range(0,row_num): rvalue.append(sheet.row_values(rownum)) return rvalue #获取第一个excel的sheet个数以及名字作为标准 allxls=get_filenames(path) first_file_fh=open_xls(allxls[0]) first_file_sheet=first_file_fh.sheets() first_file_sheet_num=len(first_file_sheet) sheet_name=[] for sheetname in first_file_sheet: sheet_name.append(sheetname.name) #定义一个目标excel endxls=xlsxwriter.Workbook(end_xls) all_sheet_value=[] #把所有内容都放到列表all_sheet_value中 for sheet_num in range(0,first_file_sheet_num): all_sheet_value.append([]) for file_name in allxls: print("opening"+file_name+"the"+str(sheet_num+1)+"label") file_value=get_file_value(file_name,sheet_num) all_sheet_value[sheet_num].append(file_value) num=-1 sheet_index=-1 #将列表all_sheet_value的内容写入目标excel for sheet in all_sheet_value: sheet_index+=1 end_xls_sheet=endxls.add_worksheet(sheet_name[sheet_index]) num+=1 num1=-1 for sheet1 in sheet: for sheet2 in sheet1: num1+=1 num2=-1 for sheet3 in sheet2: num2+=1 end_xls_sheet.write(num1,num2,sheet3) endxls.close()
最后,运行脚本
python merge.py
https://xlsxwriter.readthedocs.io/working_with_tables.html
https://katestrykermcm-blog.tumblr.com/post/84145108354/directing-excel-with-python-using-win32com
# format
https://python-pptx.readthedocs.io/en/latest/api/enum/ExcelNumFormat.html
#
https://github.com/jmcnamara/XlsxWriter
# data type
https://xlsxwriter.readthedocs.io/format.html?highlight=text_wrap#format-methods-and-format-properties
Howdy! Do you know if they make any plugins to safeguard against hackers?
I’m kinda paranoid about losing everything I’ve worked hard
on. Any tips?
Sorry, I have just learned Python, so I don’t have any good suggestions for you. Of course, with the further study, there will be better methods in the future, I will share here to everyone. Thank you for your attention.