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

Проблема: загрузка шаблона таблицы Excel. Используя команду "Сохранить" с другим именем файла, а затем выйдите из объекта взаимодействия. Это приведет к сохранению исходного файла шаблона. Не тот результат, который вам нравится.

public void saveAndExit(string filename)
{        
    excelApplication.Save(filename);
    excelApplication.Quit();
}

Открыт исходный файл c:\testing\template.xls Имя файла, которое передается, - c:\testing\7777 (date).xls

Есть ли у кого-нибудь ответ?

(Ответ, который я выбрал, был наиболее правильным и тщательным, хотя wbk.Close() требует переданных ему параметров. Спасибо.)

Ответ 1

Взаимодействие Excel довольно болезненно. Я выкопал старый проект, который у меня был, немного поиграл, и я думаю, что это то, что вы ищете. Другие комментаторы правы, но, по крайней мере, по моему опыту, есть намного больше, чтобы вызвать SaveAs(), чем вы ожидали бы, если бы вы использовали те же объекты (без обходной оболочки) в 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();

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

Ответ 2

Вместо использования ExcelApplication вы можете использовать объект Workbook и вызвать метод SaveAs(). Вы можете передать обновленное имя файла там.

Ответ 3

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

Ответ 4

  • То же самое на SaveAs
  • Всякий раз, когда мне приходится делать Interop, я создаю отдельную библиотеку классов VB.NET и записываю логику в VB. Это просто не стоит хлопот делать это в С#