【问题标题】:0x800a03ec {SaveAs method of Workbook class failed} error in TCOM/TCL0x800a03ec {工作簿类的 SaveAs 方法失败} TCOM/TCL 错误
【发布时间】:2012-03-25 09:08:18
【问题描述】:

我正在尝试将一些数据从 TCL 写入 CSV 文件,但在执行时我得到 0x800a03ec {Workbook 类的 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

【问题讨论】:

    标签: excel com tcl


    【解决方案1】:

    实际上,plain googling for this 产生了许多可能的原因和解决方案(从手动设置输出格式到达到行限制到达到字符串长度限制等)。毫无疑问,此异常与 Tcl 无关(因为它只是 COM 从 Excel 实例编组的内容),因此只需通读搜索输出中链接的讨论,看看适用于您的情况。

    【讨论】:

    • 我能够以 CSV 格式写入数据。但是数据全部损坏。例如,当我用记事本打开它时,数据已损坏,我的意思是我看不到用逗号分隔的数据。我用来将数据写入 CSV 格式的方法有什么问题吗??
    • 是的,@业余爱好者:Excel 不会根据扩展名推断文件格式;相反,您必须对SaveAs 使用双参数调用,将所需的format code 作为其第二个参数(在您的情况下为6)传递,请参阅this,了解如何正确调用SaveAs
    • 我必须补充一点,如果您仅使用 Excel 来生成 CSV 文件,与使用 Tcllib 中的 csv 包相比,这是一个非常的坏主意- - 性能方面和可移植性方面(我的意思是,跨不同的 Windows 机器)和维护方面。我建议您最好花时间学习如何使用更明智的工具来完成工作(csvstruct::matrix 软件包)。
    【解决方案2】:

    问题出在您的 SaveAs 行。它应该是

    $workbook SaveAs {c:\tst.csv}
    

    此外,您可能希望从 C:\ 更改位置,因为这通常不是可写位置。

    【讨论】:

    • 我尝试保存到不同的文件夹,也将
    • 您是否按照我所说的更改了 SaveAs 行?我能够重现您的错误并更改该行修复它。
    猜你喜欢
    • 2019-12-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-03
    相关资源
    最近更新 更多