2011-07-21 40 views
12

我有一个.xlsx文件可以编辑,我发现openpyxl可以操作Excel 2007文件。 我只想更改某些单元格中的值并保持其他设置不变。使用openpyxl编辑Excel2007文件(.xlsx)而不更改其自己的样式?

但我通过Documentation去后,我找不到编辑现有文件的例子。它只能读取一个.xlsx文件并写入一个新文件。

我尝试下面的方法来编辑现有的文件,但之后,我救了它,该文件中的风格已被删除(如字体,颜色):

from openpyxl.reader.excel import load_workbook 
wb=load_workbook(r'd:\foo1.xlsx') 
ws=wb.get_sheet_by_name('Bar') 
ws.cell('A1').value= 'new_value' 
# save the workbook to a new file to finish the editing 
# but the style settings has been removed (such like font, color) in the new file 
wb.save(r'd:\foo2.xlsx') 

回答

13

现在openpyxl不能处理好款式不够,所以我尝试使用pywin32 COM和得到了解决。 这里是一个很好python-excel-mini-cookbook使用pywin32 COM为Excel

+3

尼斯链接!它是否应该离线,这里有一个相同内容的要点:https://gist.github.com/airstrike/5469478 –

1

样式还没有完全支持的openpyxl。确保你使用latest version(1.5.3截至目前),因为它最近改进了它的风格功能。

的xlwt有.xls文件更完整的格式,但不支持XLSX作为尚未。

+0

是的,我使用V1.5.3,所以它似乎是有,现在没有什么好办法。 'COM与pywin32'工作? – Xiao

+1

COM据说工作 - 并使用办公室的本地界面。我还没有尝试过,因为它只适用于Windows。祝你好运! –

+0

使用新版本更新列后,样式是否可以保留? – conandor

-3

试试下面的代码创建下面的类的实例:

从openpyxl进口load_workbook

类具有openpyxl管理Excel数据

class Copy_excel: 
def __init__(self,src): 
    self.wb = load_workbook(src) 
    self.ws = self.wb.get_sheet_by_name("Sheet1") 
    self.dest="destination.xlsx" 

#Write the value in the cell defined by row_dest+column_dest   
def write_workbook(self,row_dest,column_dest,value): 
    c = self.ws.cell(row = row_dest, column = column_dest) 
    c.value = value 

#Save excel file 
def save_excel(self) : 
    self.wb.save(self.dest) 

永不放弃!!!

+0

这并不回答这个问题。 – matt2000

+0

是的,你可以编辑一个excel文件而不改变工作表的样式 – Heisenberg

相关问题