Я использую библиотеку Python v3 xlwings для взаимодействия с MS Excel. У меня есть файл CSV ToCopy.csv и я хотел бы скопировать все содержимое этого файла CVS в файл 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
user3848207 28 Авг 2017 в 18:46

3 ответа

Лучший ответ

Так из документации 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
2
WombatPM 28 Авг 2017 в 16:11

Попробуйте открыть 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
1
ian0411 28 Авг 2017 в 16:21

Поскольку вы пишете, что пробовали 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')
2
Eric Jensen 28 Авг 2017 в 16:09