如何通过Client Dispatch提取Excel指定列并导出为PDF?
问题原因
你代码里仅执行了work_sheets2.Range('B:B','C:C','F:F'),这只是选中了目标列,但并未告知Excel仅导出该区域——ExportAsFixedFormat默认会导出整个工作表,所以PDF仍包含全部六列。
解决方法
以下两种方案都可以实现仅导出指定列的需求:
方案1:隐藏无关列后导出
通过隐藏不需要的列(Number/A、folio/D、adress/E),让Excel仅导出可见列,导出后可选择恢复原文件的列显示:
bas=r'D:\Users\Aplication' import os from win32com.client import Dispatch excel= 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(bas,"Report","GroupA.xlsx")) work_sheets2=sheets2.Worksheets[0] # 隐藏不需要的列 work_sheets2.Columns("A:A").Hidden = True work_sheets2.Columns("D:E").Hidden = True # 导出可见列为PDF work_sheets2.ExportAsFixedFormat( Type=0, Filename=os.path.join(bas,"Proofpdf","ListA.pdf"), OpenAfterPublish=0 ) # 可选:恢复原文件的列显示(如果不需要修改原文件,Close时用SaveChanges=False) work_sheets2.Columns("A:A").Hidden = False work_sheets2.Columns("D:E").Hidden = False sheets2.Close(SaveChanges=False) excel.Quit() # 务必退出Excel进程,避免残留后台进程
方案2:直接导出选中的目标区域
选中目标列的已使用区域(避免导出整列的空白内容),直接对该区域执行导出操作:
bas=r'D:\Users\Aplication' import os from win32com.client import Dispatch excel= 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(bas,"Report","GroupA.xlsx")) work_sheets2=sheets2.Worksheets[0] # 获取目标列的已使用区域(11对应xlCellTypeLastCell,自动定位到最后有内容的单元格) target_range = work_sheets2.Range("B:B,C:C,F:F").SpecialCells(11) # 导出选中区域为PDF target_range.ExportAsFixedFormat( Type=0, Filename=os.path.join(bas,"Proofpdf","ListA.pdf"), OpenAfterPublish=0 ) sheets2.Close(SaveChanges=False) excel.Quit()
内容的提问来源于stack exchange,提问作者Marco Hernández
相关产品推荐
相关产品推荐

