我创建了一个简单的操作来将一些内容下载为 excel 文件:
public FileResult ExportToExcel()
{
string filename = "list.xlsx";
string contentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
List<string[]> list = new List<string[]>();
list.Add(new[] { "col1", "col2", "cols3" });
list.Add(new[] { "col4", "col5", "cols6" });
list.Add(new[] { "col7", "col8", "cols9" });
StringWriter sw = new StringWriter();
sw.WriteLine("ID,Date,Description");
foreach (string[] item in list)
{
sw.WriteLine("{0},{1},{2}", item[0], item[1], item[2]);
}
byte[] fileContents = Encoding.UTF8.GetBytes(sw.ToString());
return this.File(fileContents, contentType, filename);
}
我有两个问题:
1.文件已下载,但无法打开并收到警告:
Excel 无法打开文件...因为文件格式或文件扩展名无效。验证文件没有损坏并且文件扩展名与文件格式匹配。
当我使用旧的 excel 格式时:
string filename = "List.xls";
string contentType = "application/vnd.ms-excel";
我可以打开文件,但是在 3 次关于文件损坏等的不同警告之后。
顺便说一句,我比较了保存并尝试将文件写为 pdf
string filename = "List.pdf";
string contentType = "application/pdf";
而且我仍然无法打开文件 - 它说格式无效等。
2.内容出现在第二个示例中的文件中,但是逗号不被识别为列分隔符,并且一行中的所有数据都写为一列。
excel格式使用什么分隔符或如何将数据写入文件以将其保存为表格excel格式?
对我来说理想的解决方案只是返回导出的视图(强类型),但到目前为止我还没有找到如何去做。
--- 编辑:工作解决方案 ---
public FileResult ExportToExcel()
{
string filename = "List.xlsx";
string contentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
List<string[]> titles = new List<string[]>() { new[] { "a", "be", "ce" } };
List<string[]> list = new List<string[]>
{
new[] { "col1", "col2", "cols3" },
new[] { "col4", "col5", "cols6" },
new[] { "col7", "col8", "cols9" },
new[] { "col10", "col11", "cols12" }
};
XLWorkbook wb = new XLWorkbook();
XLTables xt = new XLTables();
var ws = wb.Worksheets.Add("List");
ws.Cell(1, 1).InsertData(titles);
ws.Cell(2, 1).InsertData(list);
ws.Columns().AdjustToContents();
var stream = new MemoryStream();
wb.SaveAs(stream);
stream.Seek(0, SeekOrigin.Begin);
wb.Dispose();
return this.File(stream, contentType, filename);
}