Использование Interop с C #, Excel Сохранить изменение оригинала. Как это отрицать?

В дополнение к тому, что правильно указано в ответах выше, стоит явно уточнить, что когда __iadd__ переопределяется, операция x += y НЕ заканчивается окончанием метода __iadd__.

Вместо этого он заканчивается на x = x.__iadd__(y). Другими словами, Python присваивает возвращаемое значение вашей реализации __iadd__ объекту, который вы «добавляете», ПОСЛЕ завершения реализации.

Это означает, что можно изменить левую часть x += y, чтобы завершился неявный шаг. Рассмотрим, что может произойти, когда вы добавляете к чему-то, что находится в списке:

>>> x[1] += y # x has two items

Теперь, если ваша реализация __iadd__ (метод объекта в x[1] ) ошибочно или по назначению удаляет первый элемент (x[0]) с самого начала списка, Python затем запускает ваш метод __iadd__) & amp; попробуйте присвоить его возвращаемое значение x[1]. Который больше не будет существовать (он будет в x[0]), в результате получится ÌndexError.

Или, если ваш __iadd__ вставляет что-то в начало x приведенного выше примера, ваш объект будет находиться в x[2], а не x[1], а все, что было ранее в x[0], будет теперь на x[1] и присваивается возвращаемое значение вызова __iadd__.

Если кто-то не понимает, что происходит, возникающие ошибки могут стать кошмаром для исправления.

11
задан Chad Boyer 27 August 2008 в 16:25
поделиться

4 ответа

Excel interop является довольно болезненным. Я вскопал старый проект, который я имел, сделал немного игры, и я думаю, что это - то, что Вы ищете. Другие комментаторы правы, но, по крайней мере по моему опыту, существует намного больше к вызову SaveAs (), чем Вы ожидали бы, использовали ли Вы те же объекты (без interop обертки) в VBA.

Microsoft.Office.Interop.Excel.Workbook wbk = excelApplication.Workbooks[0];  //or some other way of obtaining this workbook reference, as Jason Z mentioned
wbk.SaveAs(filename, Type.Missing, Type.Missing, Type.Missing,
            Type.Missing, Type.Missing, XlSaveAsAccessMode.xlNoChange, 
            Type.Missing, Type.Missing, Type.Missing, Type.Missing,
            Type.Missing);
wbk.Close();
excelApplication.Quit();

Должен любить все они Тип. Missings. Но я думаю, что они необходимы.

8
ответ дан 3 December 2019 в 10:27
поделиться

Вместо того, чтобы использовать ExcelApplication, можно использовать Рабочую книгу, возражают и называют SaveAs () методом. Можно передать обновленное имя файла туда.

1
ответ дан 3 December 2019 в 10:27
поделиться

Вы попробовали SaveAs из Рабочего листа?

0
ответ дан 3 December 2019 в 10:27
поделиться
  1. Так же на SaveAs
  2. Каждый раз, когда я должен сделать Interop, я создаю отдельную библиотеку классов VB.NET и пишу логику в VB. Это просто не стоит стычки, делающей его в C#
0
ответ дан 3 December 2019 в 10:27
поделиться
Другие вопросы по тегам:

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