You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修复AutoIt脚本实现将50个Excel工作簿指定数据汇总到单个文件

AutoIt Excel数据迁移脚本故障修复

核心故障原因

  • 工作表名称硬编码不兼容:源表读取指定了俄文表名Данные,目标表写入指定了俄文表名Лист1,如果对应文件没有匹配名称的工作表,读写操作会直接失效,导致判断分支不会触发
  • 字符串匹配无容错:直接全等匹配Sample和Over limit,如果单元格内容存在前后空格、大小写差异、或者是其他语言的对应值,会直接跳过匹配分支,看起来就像单元格循环没有生效
  • 写入参数笔误:三个目标列全部写入了$sampletype变量,就算条件触发,写入的内容也是错误的
  • 读写对象不一致:表头写入使用的是$workbookDestiny.Activesheet动态对象,后续数据写入硬编码了表名,目标表名不匹配时写入会失败

修复后的完整代码

#include <file.au3>
#include <Excel.au3>
opt("WinTitleMatchMode", 2)
$path = "C:\Users\User\Desktop\Nezavisimai\Papka2\"
$FileListShort = _FileListToArray($path, "*.xlsx", 1, True)
$ProgExcel = _Excel_Open()
$workbookDestiny = _Excel_BookNew($ProgExcel)
; 直接复用激活的工作表对象,避免硬编码表名出错
$objDestSheet = $workbookDestiny.Activesheet

$LineDestiny = 1
_Excel_RangeWrite($workbookDestiny, $objDestSheet, "Sample type", "A" & $LineDestiny)
_Excel_RangeWrite($workbookDestiny, $objDestSheet, "Sample name", "B" & $LineDestiny)
_Excel_RangeWrite($workbookDestiny, $objDestSheet, "Result", "C" & $LineDestiny)

For $i = 1 to $FileListShort[0]
    $workbookSource =  _Excel_BookOpen($ProgExcel, $FileListShort[$i], False, False)
    ; 先判断源文件是否存在Данные工作表,不存在就跳过当前文件
    If Not _Excel_SheetExists($workbookSource, "Данные") Then
        _Excel_BookClose($workbookSource, False)
        ContinueLoop
    EndIf
    $objSourceSheet = $workbookSource.Sheets("Данные")
    For $LineSource = 2 to 30
        ; 读取后先去除首尾空格,再转小写做匹配,提高容错
        $sampletype = StringStripWS(_Excel_RangeRead($workbookSource, $objSourceSheet, "A" & $LineSource), 3)
        $samplename = _Excel_RangeRead($workbookSource, $objSourceSheet, "B" & $LineSource)
        $sampleresult = _Excel_RangeRead($workbookSource, $objSourceSheet, "C" & $LineSource)
        $sampleobs = StringStripWS(_Excel_RangeRead($workbookSource, $objSourceSheet, "D" & $LineSource), 3)
        ; 匹配改为不区分大小写的宽松匹配
        If StringLower($sampletype) = "sample"  Then
            If StringLower($sampleobs) <> "over limit" Then
                $LineDestiny = $LineDestiny + 1
                ; 修正写入变量错误,三个列分别写入对应值
                _Excel_RangeWrite($workbookDestiny, $objDestSheet, $sampletype, "A" & $LineDestiny)
                _Excel_RangeWrite($workbookDestiny, $objDestSheet, $samplename, "B" & $LineDestiny)
                _Excel_RangeWrite($workbookDestiny, $objDestSheet, $sampleresult, "C" & $LineDestiny)
             EndIf
        EndIf
    Next
    _Excel_BookClose($workbookSource, False)
Next
; 可选:结束后保存目标文件
; _Excel_BookSaveAs($workbookDestiny, "C:\目标路径\汇总结果.xlsx")
; _Excel_Close($ProgExcel)

调试建议

如果修复后仍然不生效,可以在判断分支前加一行调试输出ConsoleWrite("行号" & $LineSource & ":" & $sampletype & "|" & $sampleobs & @CRLF),运行后查看SciTE编辑器的控制台输出,就能明确看到每一行读取到的内容,快速定位匹配失败的原因。

内容的提问来源于stack exchange,提问作者Spec86

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 02:06:03