Board logo

标题: [文件操作] 批处理如何提取ecxel表格一列数据另存为bat文件 [打印本页]

作者: ypzdy    时间: 2021-4-15 11:05     标题: 批处理如何提取ecxel表格一列数据另存为bat文件

求助。想要用批处理提取ecxel表格里其中一列的数据另存为bat文件。不知道能不能实现这样的效果?
比如提取excel表里E列的整列数据另存为一个bat文件。
作者: Batcher    时间: 2021-4-15 19:52

回复 1# ypzdy


    能否介绍一下这样做的目的是什么?
作者: ypzdy    时间: 2021-4-16 09:22

回复 2# Batcher


    工作上需要进行多个图片改名字批量上传。所以我想着能否只双击一个bat文件就能运行所有的批量改名字效果。
我已经弄到这最后一步了。卡在复制我做好的命令到bat里。只要能实现就可以大大的提高我的工作效率。
作者: Batcher    时间: 2021-4-16 10:24

回复 3# ypzdy


    请详细描述一下文件改名的规则和要求,一般情况下BAT脚本就足够了,不需要借助Excel的。
作者: went    时间: 2021-4-16 11:39

test.bat ANSI编码
  1. // & cls & cd /d "%~dp0" & @cscript -E:javascript -Nologo "%~0" &pause&exit
  2. var file = 'F:/Desktop/0.xlsx'; //文件名
  3. var col = 5; //提取的列
  4. var out = '0.txt'; //生成的文件名
  5. var ofs = new ActiveXObject('Scripting.FileSystemObject').CreateTextFile(out,true);
  6. var excel = new ActiveXObject('Excel.Application');
  7. excel.Visible = false;
  8. excel.Application.Workbooks.Open(file);
  9. for(var i=1;i<=excel.Application.ActiveSheet.UsedRange.Rows.Count;i++){
  10. WSH.Echo(excel.Application.ActiveSheet.Cells(i,col).Text);
  11. ofs.WriteLine(excel.Application.ActiveSheet.Cells(i,col).Text);
  12. }
  13. excel.Quit();
  14. ofs.Close();
复制代码

作者: netdzb    时间: 2021-4-16 11:45

本帖最后由 netdzb 于 2021-4-16 11:46 编辑

回复 5# went

老师能再写一个vbs的代码吗?
还有怎么全部转存出来?
作者: went    时间: 2021-4-16 12:03

  1. // & cls & cd /d "%~dp0" & @cscript -E:javascript -Nologo "%~0" &pause&exit
  2. var file = 'F:/Desktop/0.xlsx'; //文件名
  3. var col = 5; //提取的列
  4. var out = '0.txt'; //生成的文件名
  5. var ofs = new ActiveXObject('Scripting.FileSystemObject').CreateTextFile(out,true);
  6. var excel = new ActiveXObject('Excel.Application');
  7. excel.Visible = false;
  8. excel.Application.Workbooks.Open(file);
  9. var sheet = excel.Application.ActiveSheet; //当前工作簿
  10. var totalRow = sheet.UsedRange.Rows.Count; //数据总行数
  11. var totalCol = sheet.UsedRange.Columns.Count; //数据总列数
  12. for(var i=1;i<=totalRow;i++){
  13. var line = '';
  14. for(var j=1;j<=totalCol;j++)
  15. line += sheet.Cells(i,j).Text + ',';
  16. WSH.Echo(line);
  17. ofs.WriteLine(line);
  18. }
  19. excel.Quit();
  20. ofs.Close();
复制代码
回复 6# netdzb
作者: ypzdy    时间: 2021-4-16 13:10

回复 4# Batcher


    命名的规则是这样的。假设我有图片:321.jpg 需要重命名的格式为321&入库单&321库单.jpg
因为一定要改成这样的格式系统才会识别并且保存到对应的入库单里面。
作者: ypzdy    时间: 2021-4-16 13:11

回复 5# went


    我试试看效果。谢谢老师。
作者: ypzdy    时间: 2021-4-16 13:42

回复 5# went


    老师您好。我试了下代码。窗口提示语法错误。还有个提示是缺少十六进制数值
作者: qixiaobin0715    时间: 2021-4-16 13:55

要举实际栗子,并突出规律性。
作者: ypzdy    时间: 2021-4-16 14:07

回复 11# qixiaobin0715


    命名的規則是這樣的。假設我有圖片:321.jpg 需要重命名的格式為321&入庫單&321庫單.jpg
因為一定要改成這樣的格式系統才會識別並且保存到對應的入庫單裡面。入库单和库单这几个字也是会有变更的。
作者: qixiaobin0715    时间: 2021-4-16 14:13

图片和所谓的“入库单”、“库单”是如何对应的?
作者: ypzdy    时间: 2021-4-16 14:24

回复 13# qixiaobin0715


    对应方式是文件名。场景如下:
文件夹下有很多图片。
有:
123.jpg
332.jpg
若干个

然后是需要批量重命名为:
123&入库单&123库单.jpg
332&入库单&332库单.jpg
如此批量若干重命名
作者: qixiaobin0715    时间: 2021-4-16 14:30

入库单和库单这几个字会如何变更
作者: ypzdy    时间: 2021-4-16 14:34

回复 15# qixiaobin0715


    格式是一样的。但我需要应用在不同的场景。
比如这一场景是入库单。
下一个场景是出库单。
还有过磅单。
之类的

就会出现:
123&出库单&123库单.jpg
123&入库单&123库单.jpg
123&过磅单&123榜单.jpg
这样三种或四种不同的场景。
作者: ypzdy    时间: 2021-4-16 15:03

回复 17# qixiaobin0715


    我试试看。谢谢老师。
作者: ypzdy    时间: 2021-4-16 15:40

回复 17# qixiaobin0715


    这样还是不行。因为需要自己手输文件名进去。这样反而还增加了工作的繁琐。
能不能实现自动读取文件夹里的文件名固定只按一种规则批量修改?
作者: ypzdy    时间: 2021-4-16 15:40

回复 17# qixiaobin0715


    这样还是不行。因为需要自己手输文件名进去。这样反而还增加了工作的繁琐。
能不能实现自动读取文件夹里的文件名固定只按一种规则批量修改?
作者: ypzdy    时间: 2021-4-16 16:02

回复 5# went


    老师好。批处理代码可以用了。可是发现需要把数据保存在ecxel里才能读取。
能否做成只要打开ecxel就能直接提取列里的数据?不需要保存就能读取?
因为我已经做好了一打开ecxel就自动套入数据。谢谢。
作者: ypzdy    时间: 2021-4-16 17:41

回复 22# qixiaobin0715


    好像可以用了。但又发现了个新的问题。就是有些图片我下载过来的时候
文件名前面被添加了几个字。但上传系统的时候又必须是纯数字才能识别。
批处理的时候能做到把前面的汉字给去掉么?
场景如下:
库单123.jpg
处理后就成了库单123&入库单&123库单.jpg
可系统只能识别:
123&入库单&123库单.jpg

谢谢老师帮忙。
作者: qixiaobin0715    时间: 2021-4-17 09:58

本帖最后由 qixiaobin0715 于 2021-4-17 15:35 编辑

回复 23# ypzdy
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for %%i in (*.jpg) do (
  4.     set str=%%~ni
  5.     echo,!str:~0,1!|findstr [0-9]>nul||(
  6.         set str1=%%~ni
  7.         for /l %%j in (0,1,9) do set str1=!str1:%%j= !
  8.         for /f %%k in ("!str1!") do set str=!str:%%k=!
  9.     )
  10.     ren "%%i" "!str!^&出库单^&!str!库单.jpg"
  11. )
  12. pause
复制代码

作者: ypzdy    时间: 2021-4-18 10:54

回复 22# qixiaobin0715


    抱歉现在才看到回复。十分感谢老师的帮助。谢谢。




欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2