【问题标题】:How to copy csv contents and paste to Excel sheet?如何复制 csv 内容并粘贴到 Excel 工作表?
【发布时间】:2018-02-05 22:45:49
【问题描述】:

我正在使用 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 文件。我不确定其他方法。

【问题讨论】:

  • 可能重复的问题,检查 (stackoverflow.com/questions/17684610/python-convert-csv-to-xlsx) 看看这是否有帮助。
  • @ian0411,谢谢,但解决方案使用xlsxwriter,它在写入受密码保护的 Excel 文件时出现问题。因此,我无法在我的上下文中使用它。最好,我正在寻找使用 xlwings 库的答案。
  • @ian0411 这不是重复的,因为另一个问题是询问如何从 csv 转换为 xlsx,而这个问题是询问如何将 csv 的内容粘贴到 xlsx 文件中包含的工作表中.这是两个不同的问题。

标签: python excel python-3.x csv xlwings


【解决方案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

【讨论】:

    【解决方案2】:

    所以来自文档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. Excel 中的 VBA 宏导入文件, 通过 xlwing 触发

    【讨论】:

    【解决方案3】:

    既然你写过你已经尝试过 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')
    

    【讨论】:

    • index_col = None 是默认值 fyi。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-08-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多