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 形式で保存できないことです。

*.XLSX 形式を処理できる Openpyxl を使用しようとしましたが、既存の 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)
  • Pythonを使用して、CSVファイルから列全体を読み取り、配列/リストに保存できますか? いいえ、ファイルは順番に読み取られるため、csv リーダーはデータの列を行に読み取ることができません。代わりに、コンテンツ全体を読み、izip と islice を使用して特定の列を取得することができます。numpy.array も使用できます

  • openpyxl またはその他のパッケージを使用して、.XLSX 形式の既存の Excel ファイルを変更できますか? はい、上の例を参照してください

于 2012-11-14T15:50:05.717 に答える