使用python打印Excel工作簿

假设我有一个excel文件excel_file.xlsx ,我想用Python发送给我的打印机,所以我使用:

 import os os.startfile('path_to_file','print') 

我的问题是,这只打印Excel工作簿的第一张,但我希望打印所有的工作表。 有没有办法打印整个工作簿?

另外,我使用Openpyxl来创build文件,但似乎没有任何选项来select打印张数。

任何帮助将不胜感激。

编辑—–到目前为止,似乎我能find的唯一答案是为excel_file.xlsx每个工作表创build一个临时工作簿并excel_file.xlsx打印它们。 但是效率不高。 当我find更好的解决scheme时,我会继续search和更新。

编辑2 —-原来,问题是与Microsoft Excel, os.startfile只是将文件发送到系统的默认应用程序用于打开这些文件types。 我只是不得不将默认更改为另一个应用程序(在我的情况下WPS办公室),问题就解决了。

Solutions Collecting From Web of "使用python打印Excel工作簿"

 from xlrd import open_workbook from openpyxl.reader.excel import load_workbook import os import shutil path_to_workbook = "/Users/username/path/sheet.xlsx" worksheets_folder = "/Users/username/path/worksheets/" workbook = open_workbook(path_to_workbook) def main(): all_sheet_names = [] for s in workbook.sheets(): all_sheet_names.append(s.name) for sheet in workbook.sheets(): if not os.path.exists("worksheets"): os.makedirs("worksheets") working_sheet = sheet.name path_to_new_workbook = worksheets_folder + '{}.xlsx'.format(sheet.name) shutil.copyfile(path_to_workbook, path_to_new_workbook) nwb = load_workbook(path_to_new_workbook) print "working_sheet = " + working_sheet for name in all_sheet_names: if name != working_sheet: nwb.remove_sheet(nwb.get_sheet_by_name(name)) nwb.save(path_to_new_workbook) ws_files = get_file_names(worksheets_folder, ".xlsx") # Uncomment print command for f in xrange(0, len(ws_files)): path_to_file = worksheets_folder + ws_files[f] # os.startfile(path_to_file, 'print') print 'PRINT: ' + path_to_file # remove worksheets folder shutil.rmtree(worksheets_folder) def get_file_names(folder, extension): names = [] for file_name in os.listdir(folder): if file_name.endswith(extension): names.append(file_name) return names if __name__ == '__main__': main() 

可能不是最好的方法,但它应该工作。 作为解决方法,您可以创建单独的.xlsx文件,其中每个文件只有一个电子表格,然后使用os.startfile(path_to_file, 'print')打印它们

您可以将vBa嵌入open()命令,以使用本文中提到的xlsxwriter实用工具将excel文件打印到默认打印机: PBPYthon的嵌入vBA在Excel