Excel 尝试通过TCL(tcom)编辑xsl文件时出现未知错误0x800A01A8

Excel 尝试通过TCL(tcom)编辑xsl文件时出现未知错误0x800A01A8,excel,com,tcl,Excel,Com,Tcl,我试图做的是使用TCL脚本将文本添加到某个excel文件中。 为了使用excel,我使用了Tcom set excelFilePath "C:/TCL.Marko.xlsx" proc start_tcom {} { global excelFilePath excelApp workbook set excelApp [::tcom::ref createobject Excel.Application] set workbooks [$excelApp Workb

我试图做的是使用TCL脚本将文本添加到某个excel文件中。 为了使用excel,我使用了Tcom

set excelFilePath "C:/TCL.Marko.xlsx"

proc start_tcom {} {
    global excelFilePath excelApp workbook 
    set excelApp [::tcom::ref createobject Excel.Application]
    set workbooks [$excelApp Workbooks]
    set workbook [$workbooks Open [file nativename [file join [pwd] $excelFilePath] ] ]
    set worksheets [$workbook Worksheets]
    #
    set excel_sheet Marko.xlsx
    set worksheet [$worksheets Item [expr 1]]
    set cells [$worksheet Cells]
    return $cells
}
到目前为止,一切正常

509 % start_tcom
::tcom::handle0x0284F9D8
然后我在跑步:

513 % foreach row {1 2 3} {
    foreach column {A B C} {
        $cells Item $row $column [incr i]
    }
}
得到这个错误:

0x800a01a8 {Unknown error 0x800A01A8} 0x800a01a8{未知错误0x800a01a8} 如果我正在做
保存并关闭\u tcom
我可以看到文件Marko.xslx被更新为正确的时间和日期,因此TCL可以看到正确的文件,但仍然会出现此错误

应删除“set excel\u sheet Marko.xlsx”。 此命令意味着使用选项卡名“Marko.xlsx”,但此选项卡不存在。这就是错误出现的原因。 这是带说明的正确代码:

进程启动\u tcom{}{

            global excelFilePath excelApp workbook 
              set excelApp [::tcom::ref createobject Excel.Application]
             # Connect to Excel COM object.

            set workbooks [$excelApp Workbooks]
            set workbook [$workbooks Open [file nativename [file join [pwd] $excelFilePath] ] ]
            set worksheets [$workbook Worksheets]
            # Create inital workbook.


           set worksheet [$worksheets Item [expr 1]]
         $worksheet Name "Booleans"
  # Rename the first tab.

            set cells [$worksheet Cells]
            return $cells
            #Making cells ready for input
}

现在我们可以直接使用XSL文档了 我将展示一个将简单txt文件复制到我们刚刚创建的XSL中的示例。 假设我们有一个名为WTX.TXT的TXT文档,其中包含一个值列表。 设置fp[open”[pwd]/TEMP/WTX.txt“r] 设置文件\u数据[读取$fp]

现在我们知道XSL中的每个单元格都由一个列和raw索引,所以为了填充XSL,我们需要指定精确的索引。 在下面的代码中,我们将创建一个简单的while循环来运行txt文件值并用它们填充XSL。 }

让我们讨论标记行,这是用值填充单元格的实际命令。 行的实际格式是:$cells(我们以前创建过它)ITEM(单元格本身)Row Col 所以我们实际上说的是(backwords)取这个值,然后把它放到用一些行和列索引的单元格中。 EOF。看起来至少对错误代码的含义有一定的影响。
            set Col A 
            set Row 1 
            set Row 1
            while {[lindex $file_data $i] != ""} {
            $cells Item $Row $Col $numeric_value_from_file
            incr Row