Неизвестная ошибка 0x800A01A8 при попытке редактировать файл xsl через TCL (tcom) - PullRequest
0 голосов
/ 29 мая 2018

То, что я пытаюсь сделать, это добавить текст в какой-нибудь файл Excel, используя скрипт TCL.Для работы с 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}

, если я делаю save_and_close_tcom, я вижу файл Marko.xslx обновляется с правильным временем и датой, поэтому TCL видит правильный файл, но все равно получает эту ошибку.

1 Ответ

0 голосов
/ 31 мая 2018

"set excel_sheet Marko.xlsx" должен быть удален.эта команда означает работу с именем вкладки "Marko.xlsx", но эта вкладка не существует.и вот почему пришла ошибка.это правильный код с пояснениями:

proc start_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

Я покажу пример копирования простого текстового файла в только что созданный XSL-файл.

Предположим, у нас есть документ TXT с именем WTX.txt со списком значений.

set fp [open "[pwd] /TEMP/WTX.txt" r] set file_data [read $ fp]

Теперь, как мы знаем, каждая ячейка в XSL индексируется столбцом и raw, поэтому дляЗаполните XSL, нам нужно указать точные индексы.

            set Col A 
            set Row 1 

В следующем коде мы создаем простой цикл while для запуска значений файла txt и заполнения XSL ими.

            set Row 1
            while {[lindex $file_data $i] != ""} {
            $cells Item $Row $Col $numeric_value_from_file
            incr Row

} ​​

Давайте обсудим отмеченную строку, это фактическая команда для заполнения ячейки значением.

Фактический формат строки: $ ячейки (мы создалиэто ранее) ПУНКТ (клетка сама) Row Col

Так что мы на самом деле говорим (обратные слова) Tвозьмите значение и поместите его в ячейку, проиндексированную с некоторыми строками и столбцами.

EOF.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...