Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 0x800a03ec{工作簿类的SaveAs方法失败}TCOM/TCL中出现错误_Excel_Com_Tcl - Fatal编程技术网

Excel 0x800a03ec{工作簿类的SaveAs方法失败}TCOM/TCL中出现错误

Excel 0x800a03ec{工作簿类的SaveAs方法失败}TCOM/TCL中出现错误,excel,com,tcl,Excel,Com,Tcl,我试图将一些数据从TCL写入CSV文件,但在执行它时得到0x800a03ec{工作簿类的SaveAs方法失败}。知道为什么会这样吗 set application [::tcom::ref createobject "Excel.Application"] $application Visible 1 set workbooks [$application Workbooks] set workbook [$workbooks Add] set worksheets [$workbook Wo

我试图将一些数据从TCL写入CSV文件,但在执行它时得到0x800a03ec{工作簿类的SaveAs方法失败}。知道为什么会这样吗

set application [::tcom::ref createobject "Excel.Application"]
$application Visible 1

set workbooks [$application Workbooks]
set workbook [$workbooks Add]
set worksheets [$workbook Worksheets]
set worksheet [$worksheets Item [expr 1]]
#set worksheet [$worksheets Item "Sheet1"]
set cells [$worksheet Cells]

set rows [array size atten]
for {set row 1} {$row <= $rows} {incr row} {
    $cells Item $row "B" $atten($row)
}

$workbook SaveAs Filename {c:\tst.csv}
$application Quit
设置应用程序[::tcom::ref createobject“Excel.application”]
$1应用程序可见
设置工作簿[$应用程序工作簿]
设置工作簿[$workbooks Add]
设置工作表[$工作簿工作表]
设置工作表[$worksheets项[expr 1]]
#设置工作表[$worksheets项目“Sheet1”]
设置单元格[$工作表单元格]
设置行[数组大小atten]

对于{set row 1}{$row来说,问题出在您的SaveAs行中

set application [::tcom::ref createobject "Excel.Application"]
$application Visible 1

set workbooks [$application Workbooks]
set workbook [$workbooks Add]
set worksheets [$workbook Worksheets]
set worksheet [$worksheets Item [expr 1]]
#set worksheet [$worksheets Item "Sheet1"]
set cells [$worksheet Cells]

set rows [array size atten]
for {set row 1} {$row <= $rows} {incr row} {
    $cells Item $row "B" $atten($row)
}

$workbook SaveAs Filename {c:\tst.csv}
$application Quit
$workbook SaveAs {c:\tst.csv}

此外,您可能希望将位置从C:\更改为可写位置。

实际上,这会产生许多可能的原因和解决方案(从手动设置输出格式到达到行限制到达到字符串长度限制等)。最明确的是,此异常与Tcl无关(因为这正是COM从Excel实例封送的内容),所以只需通读从搜索输出链接的讨论,看看什么适用于您的案例。

我尝试保存到不同的文件夹,也更改了您是否如我所说更改了SaveAs行?我可以重现您的错误,并更改该行。我可以以CSV格式写入数据。但数据都已损坏。例如,当我用记事本打开它时,数据已损坏,我的意思是我没有看到用逗号分隔的数据。我用来将数据写入CSV格式的方法是否有任何问题?是的,@aftermal:Excel不会从其扩展名推断文件格式;相反,您必须使用两个参数调用
SaveAs
,按原样传递所需的数据第二个参数(在您的例子中为6),请参阅,了解如何正确调用
SaveAs
。我必须补充一点,如果您仅使用Excel生成CSV文件,与使用Tcllib中的
CSV
包相比,这是一个非常糟糕的主意--性能方面和可移植性方面(我的意思是,跨不同的Windows机器)我建议您最好花时间学习如何使用更合理的工具来完成这项工作(
csv
struct::matrix
软件包)。
set application [::tcom::ref createobject "Excel.Application"]
$application Visible 1

set workbooks [$application Workbooks]
set workbook [$workbooks Add]
set worksheets [$workbook Worksheets]
set worksheet [$worksheets Item [expr 1]]
#set worksheet [$worksheets Item "Sheet1"]
set cells [$worksheet Cells]

set rows [array size atten]
for {set row 1} {$row <= $rows} {incr row} {
    $cells Item $row "B" $atten($row)
}

$workbook SaveAs Filename {c:\tst.csv}
$application Quit