[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[文本处理] 【已解决】bat命令将csv转成.xlsx而格式不变

本帖最后由 Andalye 于 2023-11-10 13:19 编辑

求助,使用bat命令将.csv文件转成.xlsx后内容格式乱了,原本3列的内容集中到1列去了
网盘分享的原lvm文件
链接: https://pan.baidu.com/s/1ly-ZPqR3h0y_apfZbxsXlw?pwd=89ag 提取码: 89ag
18楼的大佬代码已解决99%。感谢各位热心的大佬
自己尝试直接用bat命令将csv转成xlsx文件,但都不太行,看来只能借助第三方工具了

回复 2# Batcher
是先lvm文本合并读取有效列数值,删除无效行生成的csv文件,所以可以从头开始帮忙看看脚本有没问题,感谢(文件一直上传失败~尴尬)
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. REM 读取多层目录下的.lvm文件数据并提取电压输出值
  4. for /f "delims=" %%a in ('dir /a-d/s/b *.lvm') do (
  5.     set n=0&set/a m+=1
  6.     for /f "tokens=3" %%b in ('type "%%a"') do (
  7.     set/a n+=1&set str!m!!n!=%%b
  8.     )
  9. )
  10. (for /l %%a in (1 1 !n!) do (
  11.     for /l %%b in (1 1 !m!) do (
  12.     set/p=!str%%b%%a! <nul
  13.     )
  14. echo.
  15. ))>new.lvm
  16. REM 删除前几行无效数据
  17. @for %%i in (*.lvm) do @more +7 "%%i">$&move $ "%%i"
  18. REM 读取new.lvm文件内容并按行解析
  19. for /f "tokens=*" %%a in (new.lvm) do (
  20.     set "line=%%a"
  21.     set "validLine="
  22.     set "validElements=0"
  23.    
  24.     REM 将一行数据按空格或其他空白内容分隔成数组
  25.     for %%b in (!line!) do (
  26.         set "element=%%b"
  27.         
  28.         REM 检查数组元素是否为有效数字或小数点
  29.         echo !element! | findstr /r "[0-9]*\.[0-9]*" >nul
  30.         if !errorlevel! equ 0 (
  31.             REM 找到有效元素,将其连接到validLine变量
  32.             if defined validLine (
  33.                 set "validLine=!validLine!,!element!"
  34.             ) else (
  35.                 set "validLine=!element!"
  36.             )
  37.             set /a validElements+=1
  38.         )
  39.     )
  40.     REM 将满足要求的有效行写入new.csv文件
  41.     if !validElements! geq 1 (
  42.         echo !validLine! >>new.csv
  43.         echo 数据提取中...
  44.         
  45.         ren new.csv new.xlsx
  46.     )
  47. )
  48. endlocal
  49. echo 提取数据完成,将于1s后关闭窗口!
  50. ping 127.1 -n 2 >nul
  51. REM excel一列转多列多行的公式:=OFFSET($C$1,(COLUMN(C1)-3)*81+(ROW(C1)-1),)&""
复制代码

TOP

回复 3# Andalye
网盘分享的原lvm文件
链接: https://pan.baidu.com/s/1ly-ZPqR3h0y_apfZbxsXlw?pwd=89ag 提取码: 89ag

TOP

本帖最后由 Andalye 于 2023-11-9 09:28 编辑

回复 6# terse


    3楼有我网盘分享的源文件,可以拿来调试。我自己试了你刚刚建议的代码,没抓取成功,抓取后的csv显示截图(部分代码显示是因为我关了echo off):https://ibb.co/ynCRcVr

TOP

本帖最后由 Andalye 于 2023-11-9 11:58 编辑

回复 8# Five66
可以提取成功,生成按行和列不同方式排列的2个csv文件,然后有点问题想再请教下:
1.受中文路径或文件名影响了吗,命令行界面显示乱码的,想在数据提取过程中界面提示echo 数据读取中...
2.csv再转换成xlsx文件怎么保持列格式不变,我转换后多列变1列了
我自己尝试的转换代码是
  1. powershell -Command "& {Import-Csv '___1.csv' -Delimiter "`t" | Export-Excel -Path '___1.xlsx' -Show}"
复制代码
但是报错:Export-Excel : 无法将“Export-Excel”项识别为
cmdlet、函数、脚本文件或可运行程序的名称。请检查名称的拼写,如果包括路径,请确保路径正确,然后再试一次。
所在位置 行:1 字符: 45

TOP

回复 10# pd1
好吧,安装了ImportExcel这个命令也没多大作用,还是没法正确识别分割符转成xlsx

TOP

回复 12# buyiyang


  哈哈不确定,bat 代码东拼西凑的~实在不行只能用excel 自带的数据导入来处理了

TOP

本帖最后由 Andalye 于 2023-11-9 19:50 编辑

回复 13# terse


    一开始就是没开回显的,可能哪里操作有误了吧,明天我再试试。方便的话可以你把完整的代码贴一下吗,谢谢

TOP

返回列表