繁体   English   中英

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

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

我有一些代码可以将 excel 文件从 excel 转换为 PDF。 虽然我知道 openpyxl 具有分配列宽值、换行和添加单元格边框的方法,但我正在寻找一种使用 win32com 模块的方法。 这是因为我已经用 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()

我的“去”是记录一个 Excel 宏,并以此为基础编写 Python 代码。 记录列宽更改后,启用换行并更改一些边框,我想出了这个:

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()

设置特定范围(行或列)或特定列的列宽: 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