Я пытаюсь создать электронную таблицу Excel динамически, используя OpenXMLPowerTools v4.5.3.2, DocumentFormat.Open XML v2.9.1, вызываемую из ASP. Net Core веб-приложения.
Я подтвердил, что могу сгенерировать электронную таблицу ОК.
Проблема в том, что мне нужно сгенерировать электронную таблицу ... и вернуть ее как ПОТОК ПАМЯТИ (так что ASP. Net Основной веб-контроллер
HCExcelReport.cs:
class HCExcelReport
{
protected SpreadsheetDocument doc;
protected MemorySpreadsheet ms;
protected string tmpFile = System.IO.Path.GetTempFileName();
public MemoryStream Generate(List<CandidateRecords> candidateRecords)
{
MemoryStream memoryStream = null;
using (OpenXmlMemoryStreamDocument streamDoc = OpenXmlMemoryStreamDocument.CreateSpreadsheetDocument())
{
doc = streamDoc.GetSpreadsheetDocument();
ms = new MemorySpreadsheet();
...
// Save to disk=
doc.SaveAs(tmpFile); // <-- Successfully writes .. but file remains open
doc.Dispose(); // <-- file *STILL* remains open
}
// Copy to memory stream
using (FileStream fileStream = new FileStream(tmpFile, FileMode.Open, FileAccess.Read)) // <-- Exception: the file is in use by another process!!!!
{
memoryStream = new MemoryStream();
fileStream.CopyTo(memoryStream);
memoryStream.Position = 0;
}
return memoryStream;
Я пробовал бесчисленное количество вещей ...
... Но если я использую PowerTools, я не вижу альтернатив doc.SaveAs()
...
... И если я использую doc.SaveAs()
, файл, похоже, остается «используемым» до тех пор, пока мое веб-приложение не закроется.
В: Есть предложения?