22

我基本上是在尝试从 CSV 文件中复制一些特定的列,然后使用 python 将它们粘贴到现有的 excel 文件[*.xlsx] 中。例如,您有一个这样的 CSV 文件:

 col_1   col_2   col_3  col_4
  1        2       3     4
  5        6       7     8
  9       10      11    12 

所以,我想复制 col_3 和 col_4 并将 col_8 和 col_9 中的它们粘贴到现有的 excel 文件中[这是一个 .XLSX 格式]。我已经尝试以各种方式解决这个问题,但找不到确切的方法。我试过这样的事情:

with open( read_x_csv, 'rb') as f:
    reader = csv.reader(f)
    for row in reader: 
            list1 = row[13] 
            queue1.append(list1)
            list2 = row[14] 
            queue2.append(list2)
            list3 = row[15] 
            queue3.append(list3)
            list4 = row[16] 
            queue4.append(list4)

接着

 rb = open_workbook("Exact file path.....")
 wb = copy(rb)
 ws = wb.get_sheet(0) 

 row_no = 0

 for item in queue1:
    if(item != ""):
            ii = int(item)
            ws.write(row_no,12,ii) 
            row_no = row_no + 1
            #ws.write(item)
            print item
    else:

            ws.write(row_no,12,item) 
            row_no = row_no + 1

  wb.save("Output.xls") 

但这个解决方案的问题是它不允许我保存为 *.XLSX 格式,这是我严格要求的。

我尝试使用 Openpyxl,因为它可以处理 *.XLSX 格式,但找不到修改现有 excel 文件的方法。有人可以帮忙吗?

疑问:1)我们真的可以从 CSV 文件中读取一整列并使用 python 存储到数组/列表中吗?2)我们可以使用openpyxl或任何其他包修改现有的.XLSX格式的excel文件吗?

4

4 回答 4

28

您可以尝试以下实现

from openpyxl import load_workbook
import csv
def update_xlsx(src, dest):
    #Open an xlsx for reading
    wb = load_workbook(filename = dest)
    #Get the current Active Sheet
    ws = wb.get_active_sheet()
    #You can also select a particular sheet
    #based on sheet name
    #ws = wb.get_sheet_by_name("Sheet1")
    #Open the csv file
    with open(src) as fin:
        #read the csv
        reader = csv.reader(fin)
        #enumerate the rows, so that you can
        #get the row index for the xlsx
        for index,row in enumerate(reader):
            #Assuming space separated,
            #Split the row to cells (column)
            row = row[0].split()
            #Access the particular cell and assign
            #the value from the csv row
            ws.cell(row=index,column=7).value = row[2]
            ws.cell(row=index,column=8).value = row[3]
    #save the csb file
    wb.save(dest)
  • 我们真的可以从 CSV 文件中读取一整列并使用 python 存储到数组/列表中吗?不,因为文件是按顺序读取的,所以 csv 阅读器无法将一列数据读取到一行。相反,您可以阅读全部内容并使用 izip 和 islice 来获取特定列。你也可以使用 numpy.array

  • 我们可以使用 openpyxl 或任何其他包修改现有的 .XLSX 格式的 excel 文件吗?是的,看上面的例子

于 2012-11-14T15:50:05.717 回答
6

由于它是 2021 年,get_sheet_by_name因此已弃用并引发DeprecationWarning以下消息: Call to deprecated function get_sheet_by_name (Use wb[sheetname]).

为了不引发警告,可以使用以下代码段。

from openpyxl import load_workbook

file_path = 'test.xlsx'

wb = load_workbook(file_path)

ws = wb['SHEET_NAME']  # or wb.active

ws['G6'] = 123

wb.save(file_path)


于 2021-07-17T09:09:15.733 回答
3
from openpyxl import load_workbook
# Class to manage excel data with openpyxl.

class Copy_excel:
    def __init__(self,src):
        self.wb = load_workbook(src)
        #self.ws = self.wb.get_sheet_by_name("Sheet1") # Deprecated
        self.ws = self.wb["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)
于 2017-01-19T22:25:09.840 回答
0

打开现有的 excel 文件(使用load_workbook(...)

就如此容易!

from openpyxl import load_workbook
wb = load_workbook('test.xlsx')

请参阅文档:https ://openpyxl.readthedocs.io/en/stable/tutorial.html#loading-from-a-file

在末尾追加数据(保留旧数据)

work_sheet = wb.active # Get active sheet
work_sheet.append(['John', 'Customer', 'He likes football'])

将修改后的工作簿保存在test.xlsx

wb.save('test.xlsx')
于 2021-03-26T18:40:06.107 回答