Lua采集设备温度数据 如何将输出日志导出到Excel文件
Lua温度采集日志导出Excel实现方案
不推荐直接在Lua脚本里生成.xlsx格式文件,这类方案需要引入第三方依赖,在设备端的Lua运行环境里兼容性极差,CSV格式是零成本、兼容性最好的选择,Excel全版本原生支持
方案1:修改脚本直接生成可被Excel识别的CSV文件(推荐,一步到位)
你现有脚本的输出本身就是标准逗号分隔的表格格式,只需要加几行文件写入逻辑,就能在采集完成后直接生成Excel可打开的日志文件,修改后的完整代码如下:
if globalsFile == nil then dofile("globals.lua") end if utilFile == nil then dofile("util.lua") end heaterDuration = 0 heaterInterval = 2 heaterTimeout = 20 index = 1 -- 创建带时间戳的CSV日志文件,避免覆盖历史采集记录 local logFileName = string.format("temp_collect_%s.csv", os.date("%Y%m%d_%H%M%S")) local logFile = io.open(logFileName, "w") heater.ON() print("The heaters have been turned on") print("Temperatures will be updated below every " .. heaterInterval .. " seconds") local csvHeader = "Item,Time Point,Top,Bottom,Ambient" print(csvHeader) -- 写入表头到日志文件 logFile:write(csvHeader .. "\n") tempIncrease = 'n' while (heaterDuration < heaterTimeout) do topTemp = heater.top() bottomTemp = heater.bottom() ambientTemp = temperature.ambient() local csvLine = string.format("%d,%d,%.4f,%.4f,%.4f", index, heaterDuration, topTemp, bottomTemp, ambientTemp) print(csvLine) -- 写入单条采集记录 logFile:write(csvLine .. "\n") -- 立即刷入磁盘,避免程序意外中断丢失已采集数据 logFile:flush() heaterDuration = heaterDuration + heaterInterval os.sleep(heaterInterval * 1000) end -- 采集结束关闭文件句柄 logFile:close() print(string.format("采集完成,日志已保存至当前目录:%s,双击即可用Excel打开", logFileName))
使用说明:
- 运行修改后的脚本,会在脚本同目录生成
temp_collect_采集时间.csv文件,直接双击就会默认用Excel打开,所有数据自动按列对齐 - 文件名自带时间戳,多次运行脚本不会覆盖之前的采集记录
- 新增的刷盘逻辑可以避免设备断电、程序崩溃时丢失已采集的数据
方案2:不修改脚本,直接导入现有控制台输出到Excel
如果你不想改动现有采集脚本,已经拿到了控制台打印的日志内容,按以下步骤操作即可:
- 选中控制台中从表头
Item,Time Point,Top,Bottom,Ambient开始到最后一行温度数据的所有内容,复制后粘贴到空白记事本,保存为后缀是.csv的文件 - 打开Excel,点击顶部菜单栏「数据」-「自文本/CSV」,选中刚才保存的CSV文件,编码选择UTF-8,分隔符勾选「逗号」,点击加载即可自动完成数据分列
- 如果打开后温度数值显示为科学计数法,导入时将对应列的格式设置为「数值」,保留4位小数即可正常显示
小提示:如果需要做数据筛选、生成温度变化折线图,直接在打开的CSV/Excel文件里操作即可,编辑完成后可以按需另存为.xlsx格式。
内容的提问来源于stack exchange,提问作者justin1269
相关产品推荐
相关产品推荐

