Ранее я работал с Excel Interop с целью открытия файла Excel, записи в него некоторых данных и его сохранения. Примерно так:
public void WriteAFile()
{
var xlApp = new Excel.ApplicationClass();
var xlWorkbook = xlApp.Workbooks.Add(Missing.Value);
var xlWorksheet = (Excel.Worksheet)xlWorkbook.Worksheets.get_Item(1);
xlWorksheet.Name = "Some Name";
// Write some contrived data
for (var i = 0; i < 10; i++)
{
xlWorksheet.Cells[i + 1, 1] = i;
xlWorksheet.Cells[i + 1, 2] = i + 1;
//... and so on...
}
//... and so on...
// Save the file
xlWorkbook.SaveAs(
@"",
Excel.XlFileFormat.xlWorkbookNormal,
Missing.Value,
Missing.Value,
false,
false,
Microsoft.Office.Interop.Excel.XlSaveAsAccessMode.xlNoChange,
Excel.XlSaveConflictResolution.xlLocalSessionChanges,
false,
Missing.Value,
Missing.Value,
Missing.Value
);
xlWorkbook.Close(true, Missing.Value, Missing.Value);
xlApp.Quit();
// release other resources, etc.
}
Это работает достаточно хорошо для записи приложения в файл на локальной рабочей станции. Однако сейчас я работаю над веб-приложением, которому нужно вернуть файл пользователю. Проблема в том, что файл в файловой системе не может быть изменен. Итак, что мне нужно сделать, это:
- Загрузить известный файл Excel в память (обратите внимание, что файл
.xlsm
содержит макрос-код, который будет запускаться на рабочей станции пользователя при загрузке).
- Записать известные данные в известное место в файле (ради аргумента, некоторые числовые значения в первые несколько ячеек на листе 99).
- Потоковая передача этого файла из памяти через веб-приложение (потоковая часть тривиальна, в первую очередь она получает массив байтов, что мне кажется более хитрым).
Я гуглил вокруг, но ничего не нашел. В основном только инструкции и примеры, которые делают то, что я уже делаю в моем коде выше. Также неудивительно, что при работе с COM-взаимодействием мой приведенный выше код (который довольно старый) и другой код, который я нахожу в сети, немного устарели. Мы используем .NET 4.0, поэтому все, что доступно там, подходит нам.
Степень моего опыта работы с COM в значительной степени показана в приведенном выше коде. Я бы предпочел вообще не использовать COM для этого, если это вообще возможно. Но сейчас у меня просто проблемы с отрывом от земли. Кто-нибудь может указать мне правильное направление? Может быть, ссылаться на некоторые классы или методы, которые будут здесь особенно полезны? Спасибо.
PS Еще одна вещь, которая меня пугает, - это необходимость использования Excel на веб-сервере, а также возможность открытия приложения Excel на консоли веб-сервера и зависания пользователя. какая-то невидимая ошибка Так что любой совет там очень ценится.