Board logo

标题: [文件操作] 求助批处理,Excel只保留第一个工作表 [打印本页]

作者: vanani    时间: 2024-8-16 17:27     标题: 求助批处理,Excel只保留第一个工作表

用AI写了几个都不好用。。
这是AI写的:
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. rem 设置 Excel 文件路径
  4. set "excelFilePath=C:\path\to\your\file.xlsx"
  5. rem 使用 WScript 调用 VBA 代码
  6. cscript //nologo //E:JScript <<EOF
  7. var excel = new ActiveXObject("Excel.Application");
  8. excel.Visible = false;
  9. var workbook = excel.Workbooks.Open("%excelFilePath%");
  10. var worksheets = workbook.Worksheets;
  11. for (var i = worksheets.Count; i > 1; i--) {
  12.     var sheet = worksheets(i);
  13.     sheet.Delete();
  14. }
  15. workbook.Save();
  16. workbook.Close(false);
  17. excel.Quit();
  18. deleteObject(workbook);
  19. deleteObject(excel);
  20. function deleteObject(obj) {
  21.     if (obj != null) {
  22.         try { obj.Quit(); } catch(e) {}
  23.         try { obj.Release(); } catch(e) {}
  24.         try { obj = null; } catch(e) {}
  25.     }
  26. }
  27. EOF
  28. echo Done.
  29. pause
  30. endlocal
复制代码

作者: aloha20200628    时间: 2024-8-16 19:24

本帖最后由 aloha20200628 于 2024-8-17 12:54 编辑

回复 1# vanani

以下代码存为 test.bat 运行...
  1. @set @v=1 /* &echo off
  2. set "F=C:\path\to\your\file.xlsx""
  3. if exist "%F%" cscript /e:jscript "%~f0" "%F%"
  4. pause&exit/b */
  5. v=WSH.arguments, x=WSH.CreateObject('excel.application');
  6. xF=x.workbooks.open(v(0)), w=xF.worksheets, x.displayAlerts=false;
  7. if (w.count==1) { xF.close(), x.quit(), WSH.quit(); }
  8. for (var i=w.count; i>0; i--) {
  9. if (w(i).name.toLowerCase() != 'sheet1') w(i).Delete();
  10. }
  11. xF.save(), xF.close(), x.quit(), WSH.quit();
复制代码

作者: ppll2030    时间: 2024-8-16 20:31

回复 1# vanani


    把代码保存为vbs文件,跟excel文件放在一起,运行后,该目录下所有excel文件都会删除多余的工作表。
  1. On Error Resume Next
  2. Set oExcel=WScript.createobject("Excel.Application")
  3. Set fso=WScript.CreateObject("Scripting.Filesystemobject")
  4. Set fds=fso.GetFolder(".")
  5. Set ffs=fds.Files
  6. For Each ff In ffs
  7.     If (LCase(Right(ff.Name,4))=".xls" Or LCase(Right(ff.Name,4))="xlsx" ) And Left(ff.Name,1)<>"~" Then
  8.         Set owb=oExcel.Workbooks.Open(ff.Path)
  9.         oExcel.DisplayAlerts=False
  10.         For i = owb.Sheets.Count To 2 Step -1
  11.             owb.Sheets(i).Delete
  12.         Next
  13.         owb.Save
  14.     End If
  15. Next
  16. owb.Close
  17. oExcel.Quit
  18. Set owb = Nothing
  19. Set oExcel = Nothing
  20. MsgBox "多余工作表全部删除完毕!"
复制代码

作者: aloha20200628    时间: 2024-8-17 12:56

本帖最后由 aloha20200628 于 2024-8-17 13:22 编辑

回复 1# vanani

2楼代码已订正...
一。如发现只有一张工作表则自动退出
二。sheet1工作表不一定是集合首项,须检查排除...





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