2012-11-14 6 views
6

Zasadniczo próbuję skopiować niektóre konkretne kolumny z pliku CSV i wkleić te w istniejącym pliku Excel [*. Xlsx] przy użyciu Pythona. Powiedz na przykład masz plik CSV tak:Zmodyfikuj istniejący plik Excel za pomocą Openpyxl w Pythonie

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

Więc chciałem skopiować zarówno col_3 i col_4 i wklej te w col_8 i col_9 w istniejącym pliku excel [który jest formatem .XLSX] . Próbowałem tego w różny sposób, aby rozwiązać, ale nie mogłem znaleźć dokładnego sposobu. Próbowałem coś takiego:

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) 

a następnie

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") 

ale problem z tym jest to rozwiązanie nie pozwala mi zapisać w formacie * .xlsx, który ściśle wymaganym dla mnie.

Próbowałem używać Openpyxl, ponieważ może on obsługiwać format * .XLSX, ale nie mógł znaleźć sposobu na modyfikację istniejącego pliku Excela. Czy ktoś może ci w tym pomóc?

Wątpliwość: 1) Czy naprawdę możemy odczytać całą kolumnę z pliku CSV i zapisać w tablicy/liście przy użyciu Pythona? 2) Czy możemy zmodyfikować istniejący plik Excela, który jest w formacie .XLSX przy użyciu openpyxl lub jakiejkolwiek innej paczki?

Odpowiedz

11

Można spróbować następującą realizację

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) 
  • Czy naprawdę możemy przeczytać całą kolumnę z pliku CSV i zapisać do tablicy/listy w Pythonie? Nie, ponieważ pliki są czytane sekwencyjnie, czytnik csv nie może odczytać kolumny danych do wiersza. Zamiast tego możesz przeczytać całą treść i użyć izip i islice, aby uzyskać konkretną kolumnę. Można również użyć numpy.array

  • Czy możemy zmodyfikować istniejący plik Excela, który jest w formacie .XLSX przy użyciu Openpyxl lub innego pakietu? Tak, patrz przykład powyżej

+0

Czy dostał błąd dotyczący roku będącego miech 1900 podczas próby zapisać skoroszyt? – Jesse

0

z openpyxl importowej load_workbook

klasy do zarządzania danymi programu Excel z 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)