Автоматизация исключения Excel 2007 с Powershell при вызове Рабочих книг. Добавьте ()

Одна из идей из комментария полностью ответила на мой вопрос (к точным потребностям, которые у меня были). Не уверен, как отдать ему должное здесь.

Решение состоит в том, чтобы просто закрыть стандартный ввод прямо перед использованием execvp (). Если команда не была выполнена при первом сканировании, программа выдает ошибку, которая является идеальной. Поскольку я запускаю основную программу, которую я использую в цикле, я могу использовать dup и dup2 для сохранения и перезагрузки стандартного ввода позже.

Код, который я использовал для проверки работоспособности:

#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <fcntl.h>
#include <unistd.h>

int main(int argc, char* argv[]) {
        char command[1000];

        int stdinput = dup(STDIN_FILENO);

        close(STDIN_FILENO);

        dup2(stdinput, STDIN_FILENO);


        printf("Enter command: ");
        scanf("%[^\n]s", command);


        printf("%s\n", command);
}
5
задан guillermooo 26 March 2009 в 23:05
поделиться

2 ответа

Адаптированный к Powershell из одного из решений, предложенных в Статье 320369 Справки и Поддержки MS.

$ci = new-object system.globalization.cultureinfo "en-US"

$e = New-Object -COM "Excel.Application"
$e.Visible = $True
$e.UserControl= $True
$books = $e.Workbooks
$books.PSBase.GetType().InvokeMember( `
       "Add", `
       [system.reflection.bindingflags]::InvokeMethod, `
       $null, $books, $null, $ci)

От той же статьи:

При использовании одного из этих обходных решений для компьютера, где региональные настройки не соответствуют текущей языковой версии Office, необходимо быть знакомы с тем, как Excel ведет себя и как Excel интерпретирует данные, которые могли бы быть отформатированы для определенной локали.

4
ответ дан 18 December 2019 в 10:49
поделиться

Office interop блоки, кажется, имеет эту проблему, когда текущей культурой не являются en-США. Очевидное обходное решение должно установить культуру.

Важно выполнить все это как единственную команду на интерактивной консоли, так как PowerShell V1 всегда создает новый поток для каждого вызова команды.

PS C:\Users\jachymko> $e = new-object -com excel.application
PS C:\Users\jachymko> $e.workbooks.add()
Exception calling "Add" with "0" argument(s): "Old format or invalid type library. (Exception from HRESULT: 0x80028018 (TYPE_E_INVDATAREAD))"
At line:1 char:17
+ $e.workbooks.add <<<< ()
    + CategoryInfo          : NotSpecified: (:) [], MethodInvocationException
    + FullyQualifiedErrorId : ComMethodTargetInvocation

PS C:\Users\jachymko> & {
>> [threading.thread]::CurrentThread.CurrentCulture = 'en-US'
>> $e = new-object -com excel.application
>> $e.workbooks.add()
>> $e.visible=1
>> }
>>
9
ответ дан 18 December 2019 в 10:49
поделиться
Другие вопросы по тегам:

Похожие вопросы: