У меня есть код, который создает новый файл Excel из Datatable, используя OpenXML.Когда я закончу с созданием этого файла, я хочу открыть его для пользователя, но не сохраняя его.В основном, что делает Excel в этом случае, так это то, что он открывает файл Excel как «Workbook1», а затем, если вы хотите сохранить его вручную.У меня есть это требование, потому что пользователи хотят проверить соответствие данных перед сохранением файла на диск.
Это можно сделать в Interop by Visibility (у меня уже есть это решение, но проблема в том, что Interop очень медленно работает на огромныхданные, поэтому пользователи не удовлетворены этим), но я не могу найти способ сделать то же самое в OpenXML.Если у кого-то есть предложения, пожалуйста, дайте мне знать.Вот мой код для создания файла Excel:
public void Export_To_Excel_stream(MemoryStream ms, DataTable dt)
{
using (SpreadsheetDocument dokument = SpreadsheetDocument.Create(ms, SpreadsheetDocumentType.Workbook))
{
WorkbookPart workbookPart = dokument.AddWorkbookPart();
workbookPart.Workbook = new Workbook();
WorksheetPart worksheetPart = workbookPart.AddNewPart<WorksheetPart>();
var sheetData = new SheetData();
worksheetPart.Worksheet = new Worksheet(sheetData);
Sheets sheets = workbookPart.Workbook.AppendChild(new Sheets());
Sheet sheet = new Sheet() { Id = workbookPart.GetIdOfPart(worksheetPart), SheetId = 1, Name = dt.TableName };
sheets.Append(sheet);
//header row
Row header = new Row();
List<String> Cols = new List<string>();
foreach (DataColumn col in dt.Columns)
{
Cols.Add(col.ColumnName);
Cell cell = new Cell
{
DataType = CellValues.String,
CellValue = new CellValue(col.ColumnName)
};
header.AppendChild(cell);
}
sheetData.AppendChild(header);
foreach (DataRow row in dt.Rows)
{
Row new_row = new Row();
foreach (String col in Cols)
{
Cell cell = new Cell
{
DataType = CellValues.String,
CellValue = new CellValue(row[col].ToString())
};
new_row.AppendChild(cell);
}
sheetData.AppendChild(new_row);
}
workbookPart.Workbook.Save();
}