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

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

vbscript 复制代码
@echo off
setlocal

if "%~1"=="" (
  echo 请将excel文件拖放到此批处理上
  pause
  exit /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>nul


REM 查找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软件
   pause
   exit /b 1
 )

REM 复制并重命名为ZIP
echo  copy /y "%INPUT%" "%WORK%\%NAME%.zip" >nul
copy /y "%INPUT%" "%WORK%\%NAME%.zip" >nul

REM 解压
%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%" >nul

REM 删除全部中间文件
rmdir /s /q "%WORK%\extracted"  2>nul
del  /q "%WORK%\%NAME%_new.zip" 2>nul
del /q "%WORK%\%NAME%.zip" 2>nul

echo 新生成的excel文件完成
echo 按任意键打开文件位置 
explorer /select,"%OUTPUT%"

endlocal

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

vbscript 复制代码
@echo off
setlocal enabledelayedexpansion

:: doc文档工具
:: 需要系统安装word或wps

if "%~1"=="" (
  echo 请将word文件拖放到此批处理上
  pause
  exit /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>nul

if "%INPUT%"=="" (
  echo 用法:拖文件到此批处理文件上
  pause
  exit /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 2000

echo.
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 >nul

echo 删除两个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

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

相关推荐
weixin_537217064 小时前
React资源合集
经验分享
焱焱枫7 小时前
麒麟 Linux|深入解析 Linux 文件系统架构:理念、结构与工作机制
经验分享
艾莉丝努力练剑7 小时前
【测试开发/测试】详解测试用例(下):详解设计测试用例的方法
linux·经验分享·测试用例·bug·测试
百里图书7 小时前
Python自动化办公2.0全能实战:从Excel到BI大屏,从OCR到机器学习,一站式提升办公效率100倍
python·自动化·excel·python自动化办公·python办公自动化·张同乐·python自动化办公2.0
(❁´◡`❁)Jimmy(❁´◡`❁)8 小时前
【Trie】 UVA1401 Remember the Word
算法·word·图论
TeleostNaCl9 小时前
SMBJ 简单使用指南 实现在 Java/Android 程序中访问 SMB 服务器
android·java·运维·服务器·经验分享·kotlin
acaad10 小时前
采用libreoffice将word、excel等文件转换为pdf格式
pdf·word·libreoffice
无损去水印精灵11 小时前
抖音视频图片如何去水印?去水印工具分享
经验分享·笔记·算法·音视频
zpf_叶绿体学编程11 小时前
一命速通:Go 语言操作 Office Excel 文档,从入门到实战解析
开发语言·golang·excel