基本的に、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形式で保存できないことです。
* .XLSX形式を処理できるOpenpyxlを使用しようとしましたが、既存のExcelファイルを変更する方法が見つかりませんでした。誰でもこれを助けてくれますか?
疑問:1)実際にCSVファイルから列全体を読み取って、Pythonを使用して配列/リストに格納できますか? 2)openpyxlまたは他のパッケージを使用して、.XLSX形式の既存のExcelファイルを変更できますか?
次の実装を試すことができます
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ファイルを変更できますか? はい、上の例を参照してください
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)
私の場合、Excelファイルを開いたままにしていたため、スクリプトを保存できず、アクセス許可拒否エラーが発生しました。 Excelファイルを閉じた後、スクリプトで同じExcelファイルを更新しました。