我必须将一些数据写入现有的xls文件中。(我应该说我正在使用unix而不能使用windows)
我更喜欢使用python并尝试了一些像xlwt,openpyxl,xlutils这样的库。
它不起作用,因为我的xls文件中有一些过滤器。重写此文件后,过滤器消失了。但我仍然需要这个过滤器。
有人可以告诉我有关我的选择吗? 请帮忙!
示例:
from xlutils.copy import copy
from xlrd import open_workbook
from xlwt import easyxf
start_row=0
rb=open_workbook('file.xls')
r_sheet=rb.sheet_by_index(1)
wb=copy(rb)
w_sheet=wb.get_sheet(1)
for row_index in range(start_row, r_sheet.nrows):
row=r_sheet.row_values(row_index)
call_index=0
for c_el in row:
value=r_sheet.cell(row_index, call_index).value
w_sheet.write(row_index, call_index, value)
call_index+=1
wb.save('file.out.xls');
我也尝试过: 导入xlrd 来自openpyxl import Workbook 导入unicodedata
rb=xlrd.open_workbook('file.xls')
sheet=rb.sheet_by_index(0)
wb=Workbook()
ws1=wb.create_sheet("Results", 0)
for rownum in range(sheet.nrows):
row=sheet.row_values(rownum)
arr=[]
for c_el in row:
arr.append(c_el)
ws1.append(arr)
ws2=wb.create_sheet("Common", 1)
sheet=rb.sheet_by_index(1)
for rownum in range(sheet.nrows):
row=sheet.row_values(rownum)
arr=[]
for c_el in row:
arr.append(c_el)
ws2.append(arr)
ws2.auto_filter.ref=["A1:A15", "B1:B15"]
#ws['A1']=42
#ws.append([1,2,3])
wb.save('sample.xls')
问题仍然存在。好吧,生病试图找到在Windows上运行的机器,但我必须承认别的东西: 有一些像这样的行:
我明白我做错了什么,但我仍然需要帮助。 首先,我有一张包含一些值的表格 第二张包含摘要表!!! 如果我试图复制这个工作表,那就错了。
所以,问题是:我如何从第一张表中制作汇总表?
答案 0 :(得分:0)
假设您现有的Excel文件有两列(日期和数字)。 这是使用openpyxl附加其他行的方法。
import openpyxl
import datetime
wb = openpyxl.load_workbook('existing_data_file.xlsx')
sheet = wb.get_sheet_by_name('Sheet1')
a = sheet.get_highest_row()
sheet.cell(row=a,column=0).value=datetime.date.today()
sheet.cell(row=a,column=1).value=30378
wb.save('existing_data_file.xlsx')
答案 1 :(得分:0)
如果您使用的是Windows,我建议您先使用win32com.client
方法。这允许您使用Excel本身与电子表格进行交互。这将确保应保留任何现有的过滤器,图像,表格,宏等。
以下示例打开一个XLS文件,添加一个条目并将整个工作簿保存为不同的XLS格式文件:
import win32com.client as win32
import os
excel = win32.gencache.EnsureDispatch('Excel.Application')
wb = excel.Workbooks.Open(r'input.xls')
ws = wb.Worksheets(1)
# Write a value at A1
ws.Range("A1").Value = "Hello World"
excel.DisplayAlerts = False # Allow file overwrite
wb.SaveAs(r'sample.xls', FileFormat=56)
excel.Application.Quit()
注意,请确保添加输入和输出文件的完整路径。