Print Excel workbook using python

前端 未结 5 1576
小鲜肉
小鲜肉 2021-01-03 12:36

Suppose I have an excel file excel_file.xlsx and i want to send it to my printer using Python so I use:

import os
os.startfile(\'path/to/file\',         


        
5条回答
  •  旧巷少年郎
    2021-01-03 13:15

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

    probably not the best approach, but it should work. As a workaround you can create separate .xlsx files where each has only one spreadsheet and then print them with os.startfile(path_to_file, 'print')

提交回复
热议问题