将数据写入现有的excel文件并制作汇总表

时间:2016-11-21 08:51:20

标签: python excel

我必须将一些数据写入现有的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上运行的机器,但我必须承认别的东西: 有一些像这样的行:

enter image description here

我明白我做错了什么,但我仍然需要帮助。 首先,我有一张包含一些值的表格 第二张包含摘要表!!! 如果我试图复制这个工作表,那就错了。

所以,问题是:我如何从第一张表中制作汇总表?

2 个答案:

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

注意,请确保添加输入和输出文件的完整路径。