如何向SFTP上的Excel文件写入数据?CSV可行但Excel为空问题排查
问题分析与解决
问题原因
你用xlsxwriter写入SFTP的Excel文件为空,核心原因是XlsxWriter的Workbook对象需要显式调用close()方法——它只会在关闭时才将所有工作表数据、文件元数据写入到输出流中。而CSV写法能正常工作,是因为csv.writer在操作过程中会逐步刷新缓冲区,且with块结束时会自动完成文件收尾操作。
修复后的代码
只需在写完数据后调用workbook.close(),就能确保内容正确写入SFTP文件:
import paramiko import xlsxwriter # 建立并打开SFTP连接的代码 TheList = [['name', 'address'], ['peter', 'london']] with sftp.open(SftpPath + "anewfile.xlsx", mode='wb', bufsize=32768) as f: workbook = xlsxwriter.Workbook(f) worksheet = workbook.add_worksheet() for row_num, data in enumerate(TheList): worksheet.write_row(row_num, 0, data) # 关键:显式关闭workbook,完成文件内容的写入 workbook.close()
补充说明
- XlsxWriter的Workbook初始化后不会立即写入内容,而是将数据暂存于内存,直到调用
close()才会生成完整的Excel文件结构并写入输出流。 - 若省略
close(),with块结束时仅会关闭文件句柄,但Workbook的内容从未写入流中,最终SFTP上的文件自然为空。
内容的提问来源于stack exchange,提问作者Gamsner
相关产品推荐
相关产品推荐

