Сведения о вопросе

Electro Full

18:21, 21st August, 2020

Теги

c#   excel    

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

Просмотров: 516   Ответов: 4

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

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

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

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

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



  Сведения об ответе

VERSUION

20:39, 11th August, 2020

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();

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


  Сведения об ответе

qwerty101

00:12, 26th August, 2020

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


  Сведения об ответе

ASER

21:12, 4th August, 2020

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


  Сведения об ответе

darknet

18:44, 17th August, 2020

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


Ответить на вопрос

Чтобы ответить на вопрос вам нужно войти в систему или зарегистрироваться