导出 .Net Core 打开时损坏 Excel/spreadsheet 文件 XML
Corrupt Excel/spreadsheet file on export .Net Core Open XML
导出 .Net Core 打开时损坏 Excel/spreadsheet 文件 XML
从以下代码导出的电子表格文件似乎已损坏。我正在使用 .Net Core API 到 return 具有以下测试代码的文件。谁能告诉我我做错了什么?
提前致谢!
[Route("api/tools")]
public class ImportExportController : Controller
{
private readonly IHostingEnvironment _hostingEnvironment;
public ImportExportController(IHostingEnvironment hostingEnvironment)
{
this._hostingEnvironment = hostingEnvironment;
}
[HttpGet]
[Route("export")]
public async Task<IActionResult> Export()
{
string sWebRootFolder = this._hostingEnvironment.WebRootPath;
string sFileName = @"demo.xls";
string URL = string.Format("{0}://{1}/{2}", this.Request.Scheme, this.Request.Host, sFileName);
FileInfo filePath = new FileInfo(Path.Combine(sWebRootFolder, sFileName));
var memory = new MemoryStream();
SpreadsheetManager.SpreadsheetGenerator(filePath.FullName, sFileName);
using (var stream = new FileStream(Path.Combine(sWebRootFolder, sFileName), FileMode.Open))
{
await stream.CopyToAsync(memory);
}
memory.Position = 0;
return this.File(memory, "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", sFileName);
}
}
这是电子表格管理器的代码
public static class SpreadsheetManager
{
public static void SpreadsheetGenerator(string filePath, string fileName)
{
if (File.Exists(filePath))
{
File.Delete(filePath);
}
SpreadsheetDocument document = SpreadsheetDocument.Create(filePath, SpreadsheetDocumentType.Workbook);
using (document)
{
WorkbookPart workbookPart = document.AddWorkbookPart();
workbookPart.Workbook = new Workbook();
WorksheetPart worksheetPart = workbookPart.AddNewPart<WorksheetPart>();
worksheetPart.Worksheet = new Worksheet(new SheetData());
Sheets sheets = workbookPart.Workbook.AppendChild(new Sheets());
Sheet sheet = new Sheet() { Id = workbookPart.GetIdOfPart(worksheetPart), SheetId = 1, Name = "Test Sheet" };
sheets.Append(sheet);
workbookPart.Workbook.Save();
}
}
}
交叉发布问题评论的答案:
OpenXML 很容易出错,当您出错时,工具或 Office 都帮不了您。
为此,使用 OpenXML 创建文档的官方文档是创建您想要的文件(在本例中使用 Excel),然后使用 OpenXML Productivity Tool 打开它并提取 C# 代码它生成该文件并使用它。
当您准备好继续使用更复杂的 OpenXML 文档时,阅读 OpenXML documentation.
将是值得的
导出 .Net Core 打开时损坏 Excel/spreadsheet 文件 XML
从以下代码导出的电子表格文件似乎已损坏。我正在使用 .Net Core API 到 return 具有以下测试代码的文件。谁能告诉我我做错了什么?
提前致谢!
[Route("api/tools")]
public class ImportExportController : Controller
{
private readonly IHostingEnvironment _hostingEnvironment;
public ImportExportController(IHostingEnvironment hostingEnvironment)
{
this._hostingEnvironment = hostingEnvironment;
}
[HttpGet]
[Route("export")]
public async Task<IActionResult> Export()
{
string sWebRootFolder = this._hostingEnvironment.WebRootPath;
string sFileName = @"demo.xls";
string URL = string.Format("{0}://{1}/{2}", this.Request.Scheme, this.Request.Host, sFileName);
FileInfo filePath = new FileInfo(Path.Combine(sWebRootFolder, sFileName));
var memory = new MemoryStream();
SpreadsheetManager.SpreadsheetGenerator(filePath.FullName, sFileName);
using (var stream = new FileStream(Path.Combine(sWebRootFolder, sFileName), FileMode.Open))
{
await stream.CopyToAsync(memory);
}
memory.Position = 0;
return this.File(memory, "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", sFileName);
}
}
这是电子表格管理器的代码
public static class SpreadsheetManager
{
public static void SpreadsheetGenerator(string filePath, string fileName)
{
if (File.Exists(filePath))
{
File.Delete(filePath);
}
SpreadsheetDocument document = SpreadsheetDocument.Create(filePath, SpreadsheetDocumentType.Workbook);
using (document)
{
WorkbookPart workbookPart = document.AddWorkbookPart();
workbookPart.Workbook = new Workbook();
WorksheetPart worksheetPart = workbookPart.AddNewPart<WorksheetPart>();
worksheetPart.Worksheet = new Worksheet(new SheetData());
Sheets sheets = workbookPart.Workbook.AppendChild(new Sheets());
Sheet sheet = new Sheet() { Id = workbookPart.GetIdOfPart(worksheetPart), SheetId = 1, Name = "Test Sheet" };
sheets.Append(sheet);
workbookPart.Workbook.Save();
}
}
}
交叉发布问题评论的答案:
OpenXML 很容易出错,当您出错时,工具或 Office 都帮不了您。
为此,使用 OpenXML 创建文档的官方文档是创建您想要的文件(在本例中使用 Excel),然后使用 OpenXML Productivity Tool 打开它并提取 C# 代码它生成该文件并使用它。
当您准备好继续使用更复杂的 OpenXML 文档时,阅读 OpenXML documentation.
将是值得的