当前位置: 首页 > news >正文

用批处理文件实现Excel和word文件的重造

我们知道,excel或wps的电子表格文件(后缀名为.xlsx)实际就是一个标准的zip压缩文件,我们可以通过以下手动流程对此文件实现重造:将.xlsx文件改名为.zip文件,用winRar等压缩文件进行解压缩,得到一目录,目录中主要是一堆.xml文件,再用winRar将此文件打包成标准zip文件,注意选择“zip”格式的压缩方式为“存储”,将压缩包的zip扩展名改为xlsx即完成了Excel文件的重造,下面用一批处理文件来自动实现此重造过程,批处理中用到的的winrar压缩软件,如winrar安装目录不同,按实际安装目录更改内容,使用时,只需将excel文件拖到此bat批处理文件上即可自动完成重造功能。批处理文件:拖excel到我.bat文件内容如下:

@echo off
setlocalif "%~1"=="" (echo 请将excel文件拖放到此批处理上pauseexit /b 1
)set "INPUT=%~1"
set "NAME=%~n1"
set "DESKTOP=%USERPROFILE%\Desktop"
set "WORK=%DESKTOP%\新EXCEL" 
set "OUTPUT=%WORK%\%NAME%_new.xlsx"echo 正在处理 %INPUT%REM 创建临时目录:如拖放的文件名中存在空格如不处理,会造成分别创建数个目录
echo %WORK% 
mkdir %WORK% 2>nulREM 查找winRar
set RAR= 
for %%i in  ("C:\Program Files\WinRAR\WinRAR.exe" "C:\Program Files (x86)\WinRAR\WinRAR.exe") do  (if exist %%i set "RAR=%%i"
)if %RAR%==""  (echo 错误:没有找到winRAR软件pauseexit /b 1)REM 复制并重命名为ZIP
echo  copy /y "%INPUT%" "%WORK%\%NAME%.zip" >nul
copy /y "%INPUT%" "%WORK%\%NAME%.zip" >nulREM 解压
%RAR%  x -o+  -inul "%WORK%\%NAME%.zip" "%WORK%\extracted\" REM  重新打包(zip存储格式)
echo "%RAR%"  a -afzip -m0 -r -ep1 -inul "%WORK%\%NAME%_new.zip"  "%WORK%\extracted\*"
%RAR%  a -afzip -m0 -r -ep1 -inul "%WORK%\%NAME%_new.zip"  "%WORK%\extracted\*"REM 重新打包的zip文件再创建Excel文件
copy /y  "%WORK%\%NAME%_new.zip" "%OUTPUT%" >nulREM 删除全部中间文件
rmdir /s /q "%WORK%\extracted"  2>nul
del  /q "%WORK%\%NAME%_new.zip" 2>nul
del /q "%WORK%\%NAME%.zip" 2>nulecho 新生成的excel文件完成
echo 按任意键打开文件位置 
explorer /select,"%OUTPUT%"endlocal

同理,对扩展名为.docx的文件又如何进行重造呢,这里采用系统自带的写字板作为文本内容中转来尝试完成重造,手动方法为:打开docx类型文档,选择全部文本内容并复制,打开写字板,粘贴全部文本内容,保存为.rtf或.docx文件,从而实现对文档的重造。用一个批处理文件来自动化实现上面的全部过程,批处理文件:拖word文件到我.bat

@echo off
setlocal enabledelayedexpansion:: doc文档工具
:: 需要系统安装word或wpsif "%~1"=="" (echo 请将word文件拖放到此批处理上pauseexit /b 1
)set "INPUT=%~1"
set "NAME=%~n1"
SET "FORMAT=rtf"set "DESKTOP=%USERPROFILE%\Desktop":: 注意:因要打开写字板保存对话框自动录入文件名,如果文件路径中有中文件,会造成录入混乱,故路径中工作目录必须为英文,文件名先固定为new.doc,保存成功后再处理
set "WORK=%DESKTOP%\WORD" 
set "OUTPUT=%WORK%\new.docx"echo 正在处理 %INPUT%
echo 保存的文件名为:"%OUTPUT%"REM 创建临时目录:如拖放的文件名中存在空格如不处理,会造成分别创建数个目录
echo %WORK% 
mkdir %WORK% 2>nulif "%INPUT%"=="" (echo 用法:拖文件到此批处理文件上pauseexit /b 1
)echo 准备处理拖入的文件:%INPUT%:: 检查拟创建的临时文件是否有,如有先删除,防止覆盖时提示覆盖
if exist "%OUTPUT%" (del %OUTPUT%
) :: 创建VBS脚本处理doc文档:打开word或wps复制文本
set "DOC_OPENTYPE=word.exe"
set "VBS_COPYDOC=%WORK%\doc_copy.vbs"
echo 准备创建脚本文件:!VBS_COPYDOC!
(
echo Set word = CreateObject^("Word.Application"^)
echo DOC_OPENTYPE = "word.exe"    '当前系统默认打开docx文件的应用是office中的word.exe
echo on Error Resume Next
echo If Err.Number ^<^> 0 Then
echo     Set word = CreateObject^("Kwps.Application"^)
echo     DOC_OPENTYPE="wps.exe"     '当前系统默认打开docx文件的应用是wps中的wps.exe
echo End If
echo On Error Goto 0
echo.
echo word.Visible = False
echo word.DisplayAlerts = False
echo.
echo Set doc = word.Documents.Open^("!INPUT!"^)
echo doc.Content.Select
echo doc.Content.Copy
echo.
echo doc.Close False
echo word.Quit
) > "!VBS_COPYDOC!"echo 创建VBS脚本完成: "%VBS_COPYDOC%":: 执行VBS脚本复制内容到剪贴板
echo 正在复制文档内容 "%VBS_COPYDOC%"
cscript //nologo "%VBS_COPYDOC%"
if %errorlevel% neq 0  (echo 错误:无法使用word或wps打开文档REM del "%VBS_COPYDOC%"REM exit /b 1
):: 等待复制完成
timeout /t 5 /nobreak >nul:: 创建另一个VBS脚本通过写字板保存
set "VBS_NEW=%WORK%\wordpad_save.vbs"
(
echo Set WshShell = WScript.CreateObject^("WScript.Shell"^)
echo.
echo '启动写字板
echo WshShell.Run "write.exe",1,False
echo WScript.Sleep 2000
echo.
echo '粘贴内容
echo WshShell.SendKeys "^(v)"
echo WScript.Sleep 4000
echo.
echo '打开保存对话框
echo WshShell.SendKeys "^(s)"
echo WScript.Sleep 1000
echo.
echo '确保焦点在文件名输入框echo WshShell.SendKeys  "^a"         '全选输入框中文字
echo WScript.Sleep 500
echo WshShell.SendKeys  "{DEL}"      '删除输入框中文字
echo WScript.Sleep 500
echo.
echo '输入文件名
echo WshShell.SendKeys  "%OUTPUT%"
echo WScript.Sleep 6000
echo WshShell.SendKeys "{ENTER}"
echo WScript.Sleep 500
echo.echo '确认保存
echo WshShell.SendKeys "%%s"
echo WScript.Sleep 2000echo.
echo '关闭写字板echo WShShell.SendKeys "%%{F4}"
) > "%VBS_NEW%"echo 创建VBS脚本完成: "%VBS_NEW%":: 执行VBS脚本通过写字板保存
echo 正在执行脚本通过写字板保存文件内容......
cscript //nologo "%VBS_NEW%":: 等待保存完成
timeout /t 3 /nobreak >nul:: 检查文件是否成功创建
if exist "%OUTPUT%" (echo  doc文件处理完成:%OUTPUT%
) else (echo 错误:文件保存失败exit /b 1
):: 设置最终要用写字板write.exe保存的文本
set "WRITE_FILE=%WORK%\%NAME%_new.docx"
copy "%OUTPUT%" "%WRITE_FILE%"
timeout /t 2 /nobreak >nulecho 删除两个vbs文件和一个无中文的new.docx临时文件
del   "%VBS_COPYDOC%"
del   "%VBS_NEW%"
del   "%OUTPUT%"echo 用写字板另存的docx文件: "%WRITE_FILE%"  成功,按任意键退出...
explorer /select,"%WRITE_FILE%"
explorer /select,"%WRITE_FILE%"
pause >nul

上面两个批处理有什么用处呢,这里就不明示了,仅对大家常用的两种文档进行重造自动化处理的方法进行了探讨。

http://www.dtcms.com/a/392205.html

相关文章:

  • unseping(反序列化漏洞)
  • 麒麟系统 word转为pdf
  • 【Codex CLI 配置指南(小白速通版)】
  • R及RStudio的配置与安装
  • 深度解析:基于 ODBC连接 KingbaseES 数据库的完整操作与实践
  • springboot川剧科普平台(代码+数据库+LW)
  • Vue中的监听方式
  • CentOS 7系统解决yum报错
  • GD32VW553-IOT V2开发版【温湿度检测】
  • Perplexica - 开源AI搜索引擎,让搜索更智能
  • Windows在VSCode Cline中安装Promptx
  • 深入解析 Spring AI 系列:解析返回参数处理
  • LeetCode:34.合并K个升序链表
  • 精细化关键词优化:提升SEO效果的长尾策略解析
  • Go基础:Go语言详细介绍,环境搭建,及第一个程序详解
  • 【开题答辩全过程】以 HL新闻为例,包含答辩的问题和答案
  • docker运行wonderShaper实现网卡限速
  • Windows 安装 Docker Desktop 到 D 盘完整教程(含迁移方案)
  • 基于陌讯AI检测算法本地化部署教程:基于Docker的环境配置与性能测试
  • Docker Docker Compose 完整入门与实用技巧
  • ARP协议工作原理分析(基于Wireshark)
  • CKS-CN 考试知识点分享(14) Istio网络策略
  • TCP 协议全解析:握手、挥手、重传与流控的深度剖析
  • 计算机视觉(opencv)实战二十七——目标跟踪
  • 深度学习中神经网络与损失函数优化
  • 整体设计 完整的逻辑链条 之1 点dots/线lines/面faces 的三曲:三进三出的三个来回
  • 微调基本理论
  • LeetCode算法日记 - Day 48: 课程表II、火星词典
  • 【面板数据】地级市中国方言多样性指数数据集
  • C++编程学习(第35天)