2012-11-14 82 views
6

Tôi về cơ bản đang cố sao chép một số cột cụ thể từ tệp CSV và dán vào tệp excel hiện có [*. Xlsx] bằng python. Nói ví dụ, bạn có một tập tin CSV như thế này:Sửa đổi tệp Excel hiện có bằng cách sử dụng Openpyxl trong Python

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

Vì vậy, tôi muốn copy cả col_3 và col_4 và dán những người trong col_8 và col_9 trong một hiện file excel [mà là một định dạng XLSX] . Tôi đã thử điều này theo nhiều cách khác nhau để giải quyết, nhưng không thể tìm ra cách chính xác. tôi đã cố gắng một cái gì đó như thế này:

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) 

và sau đó

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

nhưng vấn đề với giải pháp này là nó không cho phép tôi để save as * XLSX định dạng được yêu cầu nghiêm ngặt đối với tôi.

Tôi đã cố gắng sử dụng Openpyxl vì nó có thể xử lý định dạng * .XLSX, nhưng không thể tìm ra cách sửa đổi tệp excel hiện có. bất cứ ai có thể xin vui lòng giúp đỡ về điều này?

Doubt: 1) Chúng ta có thể đọc toàn bộ cột từ tệp CSV và lưu trữ vào mảng/danh sách bằng python không? 2) Chúng tôi có thể sửa đổi tệp excel hiện có có định dạng .XLSX sử dụng openpyxl hoặc bất kỳ gói nào khác không?

Trả lời

11

Bạn có thể thử thực hiện sau

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) 
  • Chúng ta có thể thực sự đọc toàn bộ một cột từ một tập tin CSV và lưu vào một mảng/danh sách sử dụng python? Không, vì các tệp được đọc tuần tự, trình đọc csv không thể đọc một cột dữ liệu thành một hàng. Thay vào đó bạn có thể đọc toàn bộ nội dung và sử dụng izip và islice để có được một cột cụ thể. Bạn cũng có thể sử dụng numpy.array

  • Chúng tôi có thể sửa đổi tệp excel hiện có có định dạng .XLSX bằng openpyxl hoặc bất kỳ gói nào khác không? Có, xem ví dụ trên

+0

Bạn đã nhận được một lỗi liên quan đến việc năm là dưới 1900 khi cố gắng lưu sổ làm việc? – Jesse

0

từ openpyxl load_workbook nhập khẩu

Class để quản lý dữ liệu excel với 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) 
Các vấn đề liên quan