我基本上是尝试从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)我们可以使用修改.XLSX格式的现有excel文件吗? openpyxl或任何其他包?
答案 0 :(得分:18)
您可以尝试以下实施
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 reader无法将一列数据读取到一行。相反,您可以阅读整个内容并使用izip和islice来获取特定列。您也可以使用numpy.array
我们可以使用openpyxl或任何其他软件包修改现有的.XLSX格式的excel文件吗? 是的,请参阅上面的示例
答案 1 :(得分:2)
由于是 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)
答案 2 :(得分:1)
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")
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)
答案 3 :(得分:0)
就我而言,我一直打开excel文件,因此脚本无法保存,并且出现权限被拒绝的错误。关闭excel文件后,我的脚本更新了相同的excel文件。
答案 4 :(得分:-1)
load_workbook(...)
)就这么简单!
from openpyxl import load_workbook
wb = load_workbook('test.xlsx')
查看文档:{{3}}
work_sheet = wb.active # Get active sheet
work_sheet.append(['John', 'Customer', 'He likes football'])
test.xlsx
wb.save('test.xlsx')