2017-08-28 197 views
0

我正在使用python v3 xlwings庫與MS Excel進行交互。我有一個csv文件ToCopy.csv,並希望將這個cvs文件的全部內容複製到一個Excel文件中。如何複製csv內容並粘貼到Excel工作表?

import xlwings as xw 

Book_name = 'C:/Temp/ExcelBook.xlsm' 
sheet_name = 'SheetName' #paste into this sheet 

wb = xw.Book(Book_name) 
sht = wb.sheets[sheet_name] 

我看着xlwings文檔,但我仍然對如何開始虧損。有人能給我一個開始?

我很樂意使用其他不基於xlwings庫的方法。但是,我的Excel文件受密碼保護,我知道xlwings可以處理受密碼保護的Excel文件。我不確定其他方法。

+0

可能重複的問題,檢查(https://stackoverflow.com/questions/17684610/python-convert-csv-to-xlsx)看如果這可以幫助。 – ian0411

+0

@ ian0411,謝謝,但解決方案使用'xlsxwriter',它有寫入密碼保護的Excel文件的問題。所以,我無法在我的上下文中使用它。最好是,我正在尋找一個使用xlwings庫的答案。 – user3848207

回答

1
從文檔

所以http://docs.xlwings.org/en/stable/quickstart.html

讀/寫值到/從範圍是一樣容易:

>>> sht.range('A1').value = 'Foo 1' 
>>> sht.range('A1').value 

'的Foo 1' 有許多便利功能可用,例如範圍擴張:

>>> sht.range('A1').value = [['Foo 1', 'Foo 2', 'Foo 3'], [10.0, 20.0, 30.0]] 
>>> sht.range('A1').expand().value 
[['Foo 1', 'Foo 2', 'Foo 3'], [10.0, 20.0, 30.0]] 

在第一示例中,一個值被寫入到位置A1。 在第二,價值被寫入A1,B1,C1和A2,B2,C2

所以,你可能想要做像

for row,line in enumerate(inputcsv): 
    myrange = 'A'+row 
    mydata = line.split(',') 
    sht.range(myrange).value = mydata 

其他選項:

  1. Excel將直接導入csv - 手動導入
  2. VBA宏在Excel中導入文件, 通過xlwing觸發
+0

如何獲得'inputcsv'?我試圖實施你的解決方案,直到我被困在那裏。 – user3848207

+0

我發現了一些對inputcsv有用的東西。 https://stackoverflow.com/questions/16139558/read-csv-then-enumerate – user3848207

1

既然你寫你已經試過xlsxwriter這可能無法正常工作,但你有沒有考慮過openpyxl?

from openpyxl import load_workbook 
from openpyxl.utils.dataframe import dataframe_to_rows 
import pandas as pd 

df = pd.read_csv('ToCopy.csv', header=None, index_col=None) 
wb = load_workbook(filename='C:/Temp/ExcelBook.xlsm') 
ws = wb.create_sheet() 
ws.title = 'ToCopy' 

for r in dataframe_to_rows(df, index=False, header=False): 
    ws.append(r) 

wb.save('C:/Temp/ExcelBook.xlsm') 
1

嘗試打開CSV並保存爲XLSX直接:

import xlwings as xw 
wb = xw.Book('C:\source.csv') # Connect to an existing file 
# wb = xw.Book(r'C:\Users\hhsg\Desktop\target.xlsx') # On Windows: use raw strings to escape backslashes 
wb.save('C:\target.xlsx') 
# wb.save(r'C:\target.xlsx') # On Windows: use raw strings to escape backslashes 
相關問題