如何在Python中从Excel返回PrintArea

时间:2019-06-17 09:06:28

标签: python excel

我正在尝试创建一个Python脚本(我在Windows 10 64位和Microsoft Office 365上使用带有UTF-8编码的Python 3.7.3)在用户选择之后将用户选择的工作表导出为PDF。 Excel文件。

Excel文件包含很多页面设置的设置,每个Excel文件中的每个工作表都有不同的页面设置。

因此,任务是我需要阅读有关页面设置的所有当前变量,以便能够将它们分配给相关变量以进行导出。

问题是当我试图让Excel返回工作表的当前打印区域时,我无法弄清楚。 据我了解,我需要能够读取当前的打印区域,以便为导出设置它。

Excel文件是“ .xlxs”和“ .xlsm”的混合。

我已经尝试使用Excel VBA文档中的各种不同方法,但到目前为止没有任何效果,例如通过添加“ .Range”和“ .Address”等。

我也尝试过“ .UsedRange”,但是可以搜索的单元格没有显着差异,并且我无法以特定的方式格式化它们,因此我无法使用它。

我也尝试过在“ ExportAsFixedFormat”功能中使用“ IgnorePrintAreas = False”变量,但这也不起作用。

#This is some of the script.
#I've left out irrelevant parts (dialogboxes etc.) just to make it shorter

#Import pywin32 and open Excel and selected workbook.
import win32com.client as win32

excel = win32.gencache.EnsureDispatch("Excel.Application")
excel.Visible = False

wb = excel.Workbooks.Open(wb_path)

#Select the 1st worksheet in the workbook
#This is just used for testing
wb.Sheets([1]).Select()

#This is the line I can't get to work
ps_prar = wb.ActiveSheet.PageSetup.PrintArea

#This is just used to test if I get the print area
print(ps_prar)

#This is exporting the selected worksheet to PDF
wb.Sheets([1]).Select()
wb.ActiveSheet.ExportAsFixedFormat(0, pdf_path, Quality = 0, IncludeDocProperties = True, IgnorePrintAreas = False, OpenAfterPublish = True)

#This closes the workbook and the Excel-file (although Excel sometimes still exists in Task Manager
wb.Close()
wb = None
excel.Quit()
excel = None

如果我保留上面的代码,然后尝试打开带有小的PrintArea(A1:H8)的测试Excel文件(.xlxs),则打印功能只会给我空行。 如果我向.PrintArea添加了一些内容(如上所述),则会得到2个错误之一:

  

“ TypeError:'str'对象不可调用”。

  

“ ps_prar = wb.ActiveSheet.PageSetup.PrintArea.Range   AttributeError:“ str”对象没有属性“ Range””

我希望有人可以在这件事上为我提供帮助-谢谢。

1 个答案:

答案 0 :(得分:0)

尝试

wb = excel.Workbooks.OpenXML(wb_path)

wb = excel.Workbooks.Open(wb_path)

我的问题是ms-office的德语版本。现在可以使用了。在这里https://social.msdn.microsoft.com/Forums/de-DE/3dce9f06-2262-4e22-a8ff-5c0d83166e73/excel-api-interne-namen?forum=officede