将 csv 转成 xlsx,如何调用系统 excel 实现

2022-04-02 19:23:39 +08:00
 git00ll

已知条件

excel 打开 csv 文件,另存为 xlsx 即可将 csv 转成 excel

需求

鉴于此我想实现代码控制 window 上安装的 excel 进行转换,即所谓的无头模式。

实现效果是:写一段程序,运行程序后将参数指定的 csv 使用 excel 转成 xlsx 。

调研

网上搜索相关资料似乎可以加载 excel 下的相关 dll 实现,没有找到具体实现

问题

想请假大家,能使用哪种语言方便实现呢?批处理可否实现?应该去哪里查询 excel 的相关资料,相关 api ?

p1

网上有很多文档转换网站,如 pdf 转 word ,excel 转 jpg ,等等,我猜测他们也是控制 excel 实现的,所以想学习下相关技术,后期实现各种 excel 支持的格式互转。

1840 次点击
所在节点    问与答
13 条回复
nodejx
2022-04-02 19:27:11 +08:00
MS 自家的 Power Automate Desktop.
loading
2022-04-02 19:30:37 +08:00
python pywin32
march1993
2022-04-02 19:31:32 +08:00
搜索 office 自动阅卷看看。。。应该是类似的基数
nodejx
2022-04-02 19:46:34 +08:00
wangkun025
2022-04-02 19:57:08 +08:00
python 或者 ruby 的话,都是一句代码读取,一句代码写入啊。
hannibalm
2022-04-02 19:58:37 +08:00
python 的 xlwings 库
Tink
2022-04-02 20:14:03 +08:00
Python 有库
wangkun025
2022-04-02 20:18:17 +08:00
# run `gem install caxlsx` before run the script

# read csv file
require 'csv'
arr_of_rows = CSV.read("input.csv")

# write to excel
require 'caxlsx'
Axlsx::Package.new do |p|
p.workbook.add_worksheet(:name => "Sheet1") do |sheet|
arr_of_rows.each {|row| sheet.add_row row}
end
p.serialize('output.xlsx')
end

# 写了个 ruby 版本的,但确实超过两行了。
kokutou
2022-04-02 20:21:15 +08:00
libreoffice
csv 本身就没格式, 所以用 libreoffice 也不怕格式出问题

start /wait soffice --headless --convert-to xlsx:"Calc MS Excel 2007 XML" file_to_convert.csv


office 之前找过的例子, 是用的 vba, 写起来特恶心...

Set wBook = Workbooks.Open(CSVfolder & fname, Format:=6, Delimiter:=",")
wBook.SaveAs XlsFolder & Replace(fname, ".csv", ""), xlOpenXMLWorkbook
wBook.Close False
miyuki
2022-04-02 20:30:00 +08:00
我当时也有类似需求,要填很多模板表( xls ),而且很多 cell 有保护,而且要保留格式,最后无奈用了 vba
ysc3839
2022-04-02 20:32:51 +08:00
可以用 Excel 提供的 COM 接口来实现,只要是能调用 COM (准确说是 IDispatch) 的语言都可以使用。cmd 脚本不行。
@kokutou 直接用 VBA 确实恶心,但是也可以用别的语言调用 COM 接口,函数、参数什么的都和 VBA 的是一样的。
renmu123
2022-04-02 21:04:20 +08:00
csv 转 xlsx 应该没什么难度,基本上每个语言都有操作的库
nightwitch
2022-04-02 21:29:23 +08:00
代码: https://gist.github.com/BlurryLight/e677730a9dfa4fef9c029b655a26d617

完全符合你的需求,调用 com 接口,支持调用 office excel/ wps excel 。
虽然 csv 转 xlsx 有许多库可以做到 (比如 pandas),但是如果你要完美符合 office 的表现的话,调用无头的 excel 进行转化是最方便的。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/844627

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX