用批处理文件实现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

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

相关推荐
星空的资源小屋21 小时前
RoboIntern,一款自动化办公小助手
运维·人工智能·pdf·自动化·电脑·excel
Metaphor6921 天前
Java 获取 Excel 中工作表的名称
经验分享
芯片智造1 天前
在半导体制造中硅片的尺寸与其厚度有什么关系呢?
经验分享·芯片·半导体·硅片
芯片智造1 天前
在半导体制造中什么是晶圆退火工艺?
经验分享·芯片·半导体·晶圆退火
会飞的小菠菜1 天前
大量Excel工作簿中的图片怎么批量提取出来
excel·导出·图片·提取·批量·保存·另存为
nongcunqq1 天前
abap 操作 excel
java·数据库·excel
我不是QI1 天前
DES 加密算法:核心组件、加解密流程与安全特性
经验分享·算法·安全·网络安全·密码学
CodeCraft Studio2 天前
国产化Excel开发组件Spire.XLS教程:将Python列表转换为Excel表格(3种实用场景)
开发语言·python·excel·spire.xls·python列表转excel·国产化文档开发
企鹅侠客2 天前
基于python写的PDF表格提取到excel文档
python·pdf·excel·pdf文档表格转excel
忘忧记2 天前
Excel VLOOKUP函数完全教程:从基础到高级实战
excel