com操作word批量替换word指定文字的示例

遇到了问题?请先进行搜索(中文和英文),然后在此提问

Moderators: tmplinshi, arcticir

shaozio
Posts: 1
Joined: 13 Nov 2019, 21:44

com操作word批量替换word指定文字的示例

08 Aug 2023, 09:32

近期要做一些重复性工作,批量替换word中的相关文字,能否帮忙写一下相关示例吗,非常感谢!
wyj304
Posts: 3
Joined: 20 Dec 2021, 21:38

Re: com操作word批量替换word指定文字的示例

15 Aug 2023, 01:16

Code: Select all

^2:: ;热键“CTRL+数字2”复制转换“员工电子设备清单和资产卡片登记表.xlsx”的选中行内容到桌面“费控固定资产卡片明细.xls”和“实物资产卡片n.docx”。
{
	if WinActive("电子设备清单和资产卡片登记表")
	{
		try objExcel1:=ComObjActive("Excel.Application") ;避免脚本启动时Excel或WPS并未运行,按热键产生错误。
		catch Error
		{
			MsgBox "脚本先于Excel文件运行导致操作无效,再按一次热键 Ctrl 2 即可。", "提示", "OK Iconi T5"
			WinActivate , , "电子设备清单和资产卡片登记表" ;激活其他窗口,避免if WinActive("...")判断条件不成立。
			Reload ;脚本重载会自动激活之前的Excel或WPS窗口
		}
		Send "{Esc}"
		Sleep 200
		objWord:=ComObject("Word.Application") ;固定资产和低值易耗品均需生成实物资产卡片
		Loop objExcel1.Selection.Rows.Count
		{
			FileCopy A_ScriptDir "\实物资产卡片模板.docx", A_Desktop "\实物资产卡片" A_Index ".docx", true
			objWord.Documents.Open(A_Desktop "\实物资产卡片" A_Index ".docx")
			objWord.Selection.Find.ClearFormatting
			objWord.Selection.Find.Replacement.ClearFormatting
			objWord.Selection.Find.Execute("卡片编号B2", 1, , , , , , 1, , objExcel1.Selection.cells(A_Index,2).Value, 1)
			objWord.Selection.Find.Execute("资产卡片名称A1", 1, , , , , , 1, , objExcel1.Selection.cells(A_Index,1).Value, 1)
			objWord.Selection.Find.Execute("型号H8", 1, , , , , , 1, , objExcel1.Selection.cells(A_Index,8).Value, 1)
			objWord.Selection.Find.Execute("计量单位M13", 1, , , , , , 1, , objExcel1.Selection.cells(A_Index,13).Value, 1)
			objWord.Selection.Find.Execute("卡片数量E5", 1, , , , , , 1, , objExcel1.Selection.cells(A_Index,5).Value, 1)
			objWord.Selection.Find.Execute("发票日期K11", 1, , , , , , 1, , objExcel1.Selection.cells(A_Index,11).Value, 1)
			objWord.Selection.Find.Execute("卡片总金额F6", 1, , , , , , 1, , objExcel1.Selection.cells(A_Index,6).Value, 1)
			objWord.Selection.Find.Execute("存放地点Q17", 1, , , , , , 1, , objExcel1.Selection.cells(A_Index,17).Value, 1)
			objWord.Selection.Find.Execute("设备位置R18", 1, , , , , , 1, , objExcel1.Selection.cells(A_Index,18).Value, 1)
			objWord.Selection.Find.Execute("资产类别#", 1, , , , , , 1, , objExcel1.ActiveSheet.Name, 1)
			objWord.Selection.Find.Execute("管理员N14", 1, , , , , , 1, , objExcel1.Selection.cells(A_Index,14).Value, 1)
			objWord.Selection.Find.Execute("领用人O15", 1, , , , , , 1, , objExcel1.Selection.cells(A_Index,15).Value, 1)
			objWord.Selection.Find.Execute("负责人P16", 1, , , , , , 1, , objExcel1.Selection.cells(A_Index,16).Value, 1)
			objWord.ActiveDocument.Save
			objWord.ActiveDocument.Close
		}
		objWord.Quit
		if objExcel1.ActiveSheet.Name="固定资产" ;低值易耗品无需生成卡片明细
		{
			objExcel2:=ComObject("Excel.Application")
			objExcel2.DisplayAlerts := False ;不提示覆盖同名文件
			objExcel2.Workbooks.Add
			objExcel2.Sheets("Sheet1").Columns.NumberFormatLocal := "@" ;设置所有列文本格式
			objExcel2.Sheets("Sheet1").Range("A1:I1").Interior.Color := 0xFCCA97 ;设置标题行背景色
			objExcel2.Sheets("Sheet1").cells(1,1).Value := "资产卡片名称(*)"
			objExcel2.Sheets("Sheet1").cells(1,2).Value := "卡片编号(*)"
			objExcel2.Sheets("Sheet1").cells(1,3).Value := "资产大类"
			objExcel2.Sheets("Sheet1").cells(1,4).Value := "部门编号(*)"
			objExcel2.Sheets("Sheet1").cells(1,5).Value := "卡片数量(*)"
			objExcel2.Sheets("Sheet1").cells(1,6).Value := "卡片总金额(*)"
			objExcel2.Sheets("Sheet1").cells(1,7).Value := "规格"
			objExcel2.Sheets("Sheet1").cells(1,8).Value := "型号"
			objExcel2.Sheets("Sheet1").cells(1,9).Value := "序列号"
			Loop objExcel1.Selection.Rows.Count
			{
				objExcel2.Sheets("Sheet1").cells(A_Index+1,1).Value := objExcel1.Selection.cells(A_Index,1).Value ;资产卡片名称(*)
				objExcel2.Sheets("Sheet1").cells(A_Index+1,2).Value := objExcel1.Selection.cells(A_Index,2).Value ;卡片编号(*)
				objExcel2.Sheets("Sheet1").cells(A_Index+1,3).Value := objExcel1.Selection.cells(A_Index,3).Value ;资产类别
				objExcel2.Sheets("Sheet1").cells(A_Index+1,4).Value := objExcel1.Selection.cells(A_Index,4).Value ;部门编号(*)
				objExcel2.Sheets("Sheet1").cells(A_Index+1,5).Value := objExcel1.Selection.cells(A_Index,5).Value ;工卡片数量(*)
				objExcel2.Sheets("Sheet1").cells(A_Index+1,6).Value := objExcel1.Selection.cells(A_Index,6).Value ;卡片总金额(*)
				objExcel2.Sheets("Sheet1").cells(A_Index+1,7).Value := objExcel1.Selection.cells(A_Index,7).Value ;规格
				objExcel2.Sheets("Sheet1").cells(A_Index+1,8).Value := objExcel1.Selection.cells(A_Index,8).Value ;型号
				objExcel2.Sheets("Sheet1").cells(A_Index+1,9).Value := objExcel1.Selection.cells(A_Index,9).Value ;序列号
			}
			objExcel2.Sheets("Sheet1").Columns.AutoFit
			; 费控导入需要Excel97-2003工作簿格式 https://docs.microsoft.com/zh-cn/office/vba/api/excel.xlfileformat
			objExcel2.ActiveWorkbook.SaveAs(A_Desktop "\费控固定资产卡片明细.xls", 56) ;不能用xlExcel8只能用56
			objExcel2PID:=WinGetPID("费控固定资产卡片明细.xls")
			objExcel2.ActiveWorkbook.Close
			objExcel2.Quit ;似乎不生效,可能跟保存的是xls格式有关。
			if ProcessExist(objExcel2PID) ;结束残留进程objExcel2
				ProcessClose objExcel2PID
		}
		MsgBox "【实物资产卡片n.docx】和【费控固定资产卡片明细.xls】已在桌面生成。", "提示", "OK Iconi T5"
	}
}

[Mod edit: Added [code][/code] tags. Please use them yourself when posting code.]

Return to “请求帮助”

Who is online

Users browsing this forum: No registered users and 10 guests