我是Python的新手,请原谅我的无知。我已经使用openpyxl和pandas尝试了几种不同的代码,但是什么都无法工作。
我需要的是在Python中复制现有列表变量的文本(这是文件路径的数组),然后将其粘贴到给定单元格中的现有xlsx工作表中。
例如,给定Python中的列表变量[“ apple”,“ orange”,“ grape”],我需要工作表1的单元格A2,A3和A4读取它们。 任何帮助深表感谢!
import pandas as pd
import os
folder = "C:\\Users\\user\\Documents\\temp"
x = []
for path in os.listdir(folder):
if path.endswith(".png"):
full_path = os.path.join(folder, path)
x.append(full_path)
fn = r"C:\\Users\\user\\Documents\\test.xlsx"
df = pd.read_excel(fn, header = None)
df2 = pd.DataFrame(x)
writer = pd.ExcelWriter(fn)
df2.to_excel(writer, startcol=0, startrow=1, header=None, index=False)
writer.save()
这使我得到的是正确的信息,但看似会覆盖任何现有数据。 现在,所有其他单元格内容和工作表都消失了,而新添加的数据在否则为空白的Sheet1中。我需要保持现有电子表格的原样,并且仅从给定工作表中的给定单元格开始添加此信息。
还使用xlwings尝试了以下方法,该方法将正确的数据导入到现有工作表中,同时保留所有其他数据,但是将第一个单元格替换为0。如何从数据帧中删除多余的0? >
filename = "C:\\Users\\user\\Documents\\test.xlsx"
df = pd.DataFrame(x)
wb = xw.Book(filename)
ws = wb.sheets('Sheet1')
ws.range('A2').options(index=False).value = df
wb = xw.Book(filename)
编辑:如果我用Series替换DataFrame,则上面的xlwings代码似乎可以工作。 解决方案:
import xlwings as xw
filename = "C:\\Users\\user\\Documents\\test.xlsx"
df = pd.Series(x)
wb = xw.Book(filename)
ws = wb.sheets('Sheet1')
ws.range('A2').options(index=False).value = df
wb = xw.Book(filename)
答案 0 :(得分:1)
我需要保持现有电子表格的原样
以附加模式打开excel文件,例如take a look at this answer(同一线程中的其他答案也很有用)。
答案 1 :(得分:0)
如果要通过索引(例如“ A1”)引用excel工作表,可以使用 openpyxl
from openpyxl import load_workbook
workbook = load_workbook(filename="sample.xlsx")
ll = ["apple", "orange", "grape"]
sheet = workbook.active
sheet["A2"] = ll[0]
sheet["A3"] = ll[1]
sheet["A4"] = ll[2]
workbook.save(filename="sample.xlsx")
猜猜这可以解决您的问题
答案 2 :(得分:0)
如果您满意追加到工作表中的下一个空白列,则这可能会有效,具体取决于数据的格式。有了此附加条款,pandas
库非常适合处理表格数据,并且可以使用Excel文件(使用openpyxl
库)。
您似乎已经安装了熊猫,但是为了其他阅读的利益,请确保先安装了熊猫和openpyxl:
pip install pandas openpyxl
然后尝试:
import pandas as pd
df = pd.read_excel('filename.xlsx')
df['new_column_name'] = listname
df.to_excel('output_spreadsheet.xlsx')
我个人觉得比直接使用openpyxl更具可读性。
答案 3 :(得分:0)
import xlwings as xw
filename = "C:\\Users\\user\\Documents\\test.xlsx"
df = pd.Series(x)
wb = xw.Book(filename)
ws = wb.sheets('Sheet1')
ws.range('A2').options(index=False).value = df
wb = xw.Book(filename)