我想在 Excel 文件中设置多个活动工作表,或将默认打印设置更改为“打印整个工作簿”。
这可以在 Excel 中手动完成。但我想自动将其写入文件。 背景是这样的:我有多个工作表的Excel文件。这些应该通过右键单击来打印,即所有工作表或活动工作表。
我的安萨兹:
from openpyxl import Workbook,load_workbook
from openpyxl.styles import Alignment
wb = load_workbook(filename)
sheets = wb.sheetnames
for sheet in sheets:
ws = wb[sheet]
alig = Alignment(horizontal='left', vertical='top',wrapText=True, shrinkToFit = True)
# Einstellungen zum drucken
ws.print_title_rows = '1:1' # erste Zeile
# ws.print_title_cols = 'A:A' # erste spalte
ws.page_setup.orientation = ws.ORIENTATION_LANDSCAPE # Querformat
ws.page_setup.paperSize = ws.PAPERSIZE_A4 # Papiergröße
ws.sheet_properties.pageSetUpPr.fitToPage = True
ws.page_setup.fitToHeight = False # alle Zeilen auf einer seite
ws.page_setup.fitToWidth = True # alle Spalten auf einer seite
# angaben in INCH
ws.page_margins.header = 0.393701 # Kopfzeile
ws.page_margins.footer = 0.0 # Fusszeile
ws.page_margins.left = 0.393701 # links
ws.page_margins.right = 0.393701 # rechts
ws.page_margins.bottom = 0.393701 # unten
ws.page_margins.top = 0.787402 # oben
# Kopf unf Fußzeile
ws.HeaderFooter.differentFirst = True
# ws.HeaderFooter.firstFooter.left.text = sheet
ws.HeaderFooter.firstHeader.right.text = sheet
wb.active = 0 ############## an dieser Stelle möchte ich alle/bestimmte Blätter auswählen bzw. aktiv setzten, oder, wahrscheinlich in den ws.sheet_properties.pageSetUpPr, die defaulteinstellung auf "Gesamte Arbeitsmappe drucken" umstellen.
wb.save(filename)
wb.close()
有人知道如何实施吗? Openpyxl 中是否有此打印默认设置,或者如何激活多张纸并同时保存它们(可以单独完成)。 谢谢
您可以使用 Openpyxl 激活多个工作表,但无法使用此模块打印工作表,因此不确定这是否是适合您目的的最佳选择。
但是,如果您确实想这样做,以下代码将会有所帮助。
要将工作表设置为活动状态,您可能需要/想要包含一个条件(基于工作表名称或其他)来确定是否应将工作表设置为活动状态。
保存后,当在 Excel 中打开工作簿时,如果使用“打印活动工作表”,这些工作表将全部被选中,并且将被打印。
请记住,工作簿中的默认活动工作表可能不是您想要选择的工作表,因此可能需要取消选择该工作表。
...
### De-Active-ate the current active Sheet
wb[wb.active.title].views.sheetView[0].tabSelected = False
### Set selected Sheets as Active
for sheet in wb.worksheets:
if sheet.title <matches required criteria>:
sheet.views.sheetView[0].tabSelected = True
如果您也想实际打印,则需要使用 Xlwings 或 Win32com 等模块。
您可以执行类似的操作并选择工作表(使它们处于活动状态);
按名称选择与列表中的条件匹配的工作表“选择”这些工作表。保存的工作簿在打开时将使这些工作表处于活动状态。
import xlwings as xw
with xw.App(visible=True) as app:
wb = xw.Book('foo2.xlsx')
sheet_list = []
for s_name in wb.sheet_names:
if s_name <match criteria>:
sheet_list.append(s_name)
wb.api.Sheets(sheet_list).Select()
wb.save('foo_out.xlsx')
但是,您不需要保存此状态进行打印,您可以在该代码执行中打印选定的工作表。
以下代码将仅打印那些选择到sheet_list列表中的工作表。如果这就是您所需要的全部内容,则无需进行选择并保存工作簿。
import xlwings as xw
with xw.App(visible=True) as app:
wb = xw.Book('foo2.xlsx')
sheet_list = []
for s_name in wb.sheet_names:
if s_name <match criteria>:
sheet_list.append(s_name)
wb.api.Sheets(sheet_list).PrintOut(Copies=1)