简体   繁体   English

在 python 中使用 win32com 分配列宽值,换行并为 Excel 文件添加单元格边框

[英]Use win32com in python to assign column width value, wrap text and add cell border to Excel file

I have some code to convert an excel file from excel to PDF.我有一些代码可以将 excel 文件从 excel 转换为 PDF。 Although I know that openpyxl has methods to assign column width value, wrap text and add cell border, I am looking for a way to do it with win32com module.虽然我知道 openpyxl 具有分配列宽值、换行和添加单元格边框的方法,但我正在寻找一种使用 win32com 模块的方法。 This is because I already have opened the Excel file with win32com and I can save execution time by not having to load the Excel file with openpyxl again.这是因为我已经用 win32com 打开了 Excel 文件,我可以通过不必再次用 openpyxl 加载 Excel 文件来节省执行时间。

# Import Module
from win32com import client
  
# Open Microsoft Excel
excel = client.gencache.EnsureDispatch('Excel.Application')

# Make excel work in the background without appearing
excel.Visible = False
  
# Read Excel File
wb = excel.Workbooks.Open(r'C:\Spaced out data.xlsx')
ws = wb.Worksheets('Sheet1')

# Adjust page setup to landscape
ws.PageSetup.Orientation = 1

# Set Zoom to false because you want to fit all columns to the width of 1 page.
ws.PageSetup.Zoom = False

# Allow rows to be on multiple pages
ws.PageSetup.FitToPagesTall = False

# Fit all columns to the width of 1 page.
ws.PageSetup.FitToPagesWide = 1

# Convert into PDF File
ws.ExportAsFixedFormat(0, r'C:\Spaced out data.pdf')

wb.Close(SaveChanges=False)
excel.Quit()

My "go to" is to record an Excel macro and use it as a basis to write the Python code.我的“去”是记录一个 Excel 宏,并以此为基础编写 Python 代码。 After recording a column width change, enable wrap, and change some borders I came up with this:记录列宽更改后,启用换行并更改一些边框,我想出了这个:

from win32com import client

excel = client.gencache.EnsureDispatch('Excel.Application')
excel.Visible = False
wb = excel.Workbooks.Open(r'c:\users\metolone\test.xlsx')
ws = wb.Worksheets('Sheet1')

ws.Range("A:F").ColumnWidth = 10
ws.Range("A1:F1").WrapText = True
ws.Range("A1:F15").Borders(client.constants.xlEdgeLeft).LineStyle = client.constants.xlContinuous
ws.Range("A1:F15").Borders(client.constants.xlEdgeLeft).Weight = client.constants.xlThick

ws.PageSetup.Orientation = 1
ws.PageSetup.Zoom = False
ws.PageSetup.FitToPagesTall = False
ws.PageSetup.FitToPagesWide = 1
ws.ExportAsFixedFormat(0, r'c:\users\metolone\test.pdf')
wb.Close(SaveChanges=False)
excel.Quit()

Set the column width for specific range(row or column) or specific column: import os import win32com.client as win32 from win32com.client import Dispatch设置特定范围(行或列)或特定列的列宽: import os import win32com.client as win32 from win32com.client import Dispatch

file = os.getcwd() + os.sep + 'Portfolio.xls'
excel = Dispatch('Excel.Application')
workbook = excel.Workbooks.Open(file)
worksheet = workbook.Worksheets("Portfolio")

excel.DisplayAlerts = False
excel.Visible = False

worksheet.Range("A1:A14").ColumnWidth = 25  #Specify the rows in range
worksheet.Columns(1).ColumnWidth = 25       #Specific Column number
worksheet.Range("B:B").ColumnWidth = 25

worksheet.Columns.AutoFit()                 #Use autofit

workbook.Save()
workbook.Close()
excel.Application.Quit()

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM