我想打开一个模板xlsx文件,要在其中复制并插入一行。我试图找到解决方案,但最终得到了相同的结果:无效的Excel文件。 这是我上次尝试的来源:
using (Stream xlsxStream = new MemoryStream())
{
using (var fileStream = File.OpenRead(templatePath))
fileStream.CopyTo(xlsxStream);
xlsxStream.Seek(0L, SeekOrigin.Begin);
using (var workbook = SpreadsheetDocument.Open(xlsxStream, true,
new OpenSettings { AutoSave = true }))
{
var sheet = workbook.WorkbookPart.Workbook.Descendants<Sheet>().First(s => s.Name.Equals("abc"));
string relationshipId = sheet.Id.Value;
WorksheetPart worksheetPart = (WorksheetPart)workbook.WorkbookPart.GetPartById(relationshipId);
Worksheet worksheet = worksheetPart.Worksheet;
SheetData sheetData = worksheetPart.Worksheet.Elements<SheetData>().First();
var row12 = sheetData.Elements<Row>().Where(r => r.RowIndex.Value == 12).FirstOrDefault();
var newRow = new Row() { RowIndex = row12.RowIndex.Value };
IEnumerable<Row> rows = sheetData.Descendants<Row>().Where(r => r.RowIndex.Value > row12.RowIndex.Value);
foreach (Row row in rows)
{
uint newRowIndex = System.Convert.ToUInt32(row.RowIndex.Value + 1);
foreach (Cell cell in row.Elements<Cell>())
{
string cellReference = cell.CellReference.Value;
cell.CellReference = new StringValue(cellReference.Replace(row.RowIndex.Value.ToString(), newRowIndex.ToString()));
}
row.RowIndex = new UInt32Value(newRowIndex);
}
sheetData.InsertAfter(newRow, row12);
}
using (var resultFile = File.Create(resultPath))
xlsxStream.CopyTo(resultFile);
}
请问错误在哪里。
更新 我将Stream更改为MemoryStream和
using (var resultFile = File.Create(resultPath))
xlsxStream.CopyTo(resultFile);
到
File.WriteAllBytes(resultPath, xlsxStream.ToArray());