有趣的xlwings问题:脚本在Python中工作,但不能从Excel中工作



我编写了一个程序,该程序读取目录中的所有文本文件,将它们作为表格数据加载到数据帧中,然后将每个数据帧加载到同一工作簿中的新Excel工作表中。预期目的是从工作簿上的按钮调用程序,然后加载目录中的所有数据。

该程序在python中运行良好,具有任何目录和任何文本文件...但不是从 Excel 中调用时。

这是我得到的错误:

---------------------------
Error
---------------------------
Traceback (most recent call last):
File "<string>", line 1, in <module>
File "h:notebooksaugustine projectramread.py", line 35, in data_reader clean_null_bytes(text_files) # Clean each file of null bytes
File "h:notebooksaugustine projectramread.py", line 76, in clean_null_bytes
with open(file, 'rb') as to_clean :
FileNotFoundError: [Errno 2] No such file or directory: '1 KPA COLUMN 
BELOW REACTION TABLE.TXT'

因此,它从该路径中获取正确的路径和文件名,但由于某种原因,似乎在Excel中打开路径上的文件不起作用。Excel 是否有其他解释文件路径的方式?对于这个问题的下一步,我真的很不知所措。

任何帮助或想法将不胜感激。

这是程序,如下:

import os as os
from tkinter.filedialog import askdirectory,Tk
import pandas as pd
def main() :   
Book = xl.Book.caller()
data_dictionary  = data_reader()
for title, table in data_dictionary.items() :
Book.sheets.add(name = title)
Book.sheets[title].range("B2").value = table
def data_reader() -> dict :
folder = open_folder() # User selects folder on system
text_files = get_txt_files(folder) # Generate a list of text files in folder
clean_null_bytes(text_files) # Clean each file of null bytes
data_dict = tables_for_export(text_files) # Read the cleaned files as dataframes in a dict
return data_dict
def open_folder() -> str :
root = Tk()
root.withdraw()
root.update
folder = askdirectory()
root.destroy()
return folder
def get_txt_files(directory_path: str) -> list :
all_files = os.listdir(directory_path)
txt_files = [file for file in all_files if 
(file[-4:] == ".txt") or   #check the last four chars in file name
(file[-4:] == ".TXT")]
return txt_files
def clean_null_bytes(list_of_txt_files: list) :
for file in list_of_txt_files :
with open(file, 'rb') as to_clean :
raw_data = to_clean.read()
clean_data = raw_data.replace(b'x00', b'')
with open(file, 'wb') as cleaned :
cleaned.write(clean_data)      
return
def tables_for_export(list_of_txt_files: list) -> dict :
for_export = {}
for file in list_of_txt_files :
data_frame = pd.read_table(file)
for_export.update({file[:-4] : data_frame})
return for_export

谢谢 Zumstein @Felix让我停留在文件路径解决方案上。问题确实是文件路径问题。

我从tkinter.askdirectory((获取绝对文件路径,并使用它来生成文本文件列表。然后我试图只用文件名打开这些文本文件。这在 Python 中有效(可能是因为我在与文件相同的目录中运行脚本(,但在 Excel 中不起作用。

为了解决这个问题,我必须将目录路径连接到列表中每个文件名的开头。然后我可以打开文件。然后我不得不从文件名中删除路径,以便将文件名用作Excel中工作表的名称。

将发布最终代码以保持完整性。

相关内容

  • 没有找到相关文章

最新更新