我有一个包含六列(编号、名称、组、作品集、地址和电子邮件)的 Excel 文件,我需要使用客户端调度,以仅获取工作表的列(名称、组和电子邮件)和将其另存为 pdf 并保存在新文件夹中。
我有下一个代码。
bas=r'D:\Users\Aplication'
excel= client.Dispatch("Excel.Application")
excel.Visible=False
excel.ScreenUpdating= False
excel.EnableEvents= False
excel.Interactive= False
excel.DisplayAlerts=False
sheets2= excel.Workbooks.Open(os.path.join(os.path.join(bas,"Report"),f"GroupA.xlsx"))
work_sheets2=sheets2.Worksheets[0]
work_sheets2.Range('B:B','C:C','F:F')
work_sheets2.ExportAsFixedFormat(0,os.path.join(os.path.join(bas,"Proofpdf"),f"ListA.pdf"),OpenAfterPublish=0)
sheets2.Close(True)
它可以工作,但结果是一个 PDF,其中包含与 Excel 文件中相同的六列。有人可以帮助我仅选择 Excel 的某些列并将其保存在 PDF 文件中吗?
我认为在范围内使用非连续列是行不通的。当然我会期待这条线
work_sheets2.Range('B:B','C:C','F:F')
返回错误。无论哪种方式,您都没有选择范围,该行是一条不适用于任何内容的语句。您需要分配给一个变量,然后导出该范围,请参阅代码示例。
还期望此行返回选择工作表的错误。
work_sheets2=sheets2.Worksheets[0]
无论如何,您可以临时将 F 列复制到 D 列的位置,这样您就有一个连续的范围 B - D 并将该范围用于 PDF。
然后导出后只需删除D列即可。
示例代码
import os
from win32com import client
xlToRight = -4161
bas=r'D:\Users\Aplication'
excel = client.Dispatch("Excel.Application")
excel.Visible = False
excel.ScreenUpdating = False
excel.EnableEvents = False
excel.Interactive = False
excel.DisplayAlerts = False
sheets2 = excel.Workbooks.Open(os.path.join(os.path.join(bas, "Report"), f"GroupA.xlsx"))
sheet_names = [sheet.Name for sheet in sheets2.Sheets]
### Select the required sheet
# work_sheets2 = sheets2.Worksheets[0]
work_sheets2 = sheets2.Worksheets(1)
### Insert a copy of Column F into position of column D
work_sheets2.Range("F:F").Copy()
work_sheets2.Range("D:D").Insert(Shift=xlToRight)
### Set range of data to export and assign to variable 'rng'
# work_sheets2.Range('B:B', 'C:C', 'F:F')
rng = work_sheets2.Range('B:B', 'D:D')
### Export 'rng' to PDF
rng.ExportAsFixedFormat(0, os.path.join(os.path.join(bas, "Proofpdf"), f"ListA.pdf"), OpenAfterPublish=0)
### Delete temp copied Column
work_sheets2.Range("D:D").Delete()
### Close and exit
sheets2.Close(True)
excel.Quit()