如何复制csv内容并粘贴到Excel工作表?
我正在使用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文件。我不确定其他方法。
所以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
其他选项:
- Excel将直接导入csv - 手动导入
- VBA宏在Excel中导入文件, 通过xlwing触发
如何获得'inputcsv'?我试图实施你的解决方案,直到我被困在那里。 – user3848207
我发现了一些对inputcsv有用的东西。 https://stackoverflow.com/questions/16139558/read-csv-then-enumerate – user3848207
既然你写你已经试过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')
尝试打开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
可能重复的问题,检查(https://stackoverflow.com/questions/17684610/python-convert-csv-to-xlsx)看如果这可以帮助。 – ian0411
@ ian0411,谢谢,但解决方案使用'xlsxwriter',它有写入密码保护的Excel文件的问题。所以,我无法在我的上下文中使用它。最好是,我正在寻找一个使用xlwings库的答案。 – user3848207