Excel 尝试通过TCL(tcom)编辑xsl文件时出现未知错误0x800A01A8
我试图做的是使用TCL脚本将文本添加到某个excel文件中。 为了使用excel,我使用了TcomExcel 尝试通过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
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