使用POI读取/写入XLSM
本文关键字:写入 XLSM 读取 POI 使用 | 更新日期: 2023-09-27 17:58:40
我在c#代码中使用POI已经好几个星期了,我发现了一个我无法解决的问题:Xlsm。
我必须打开一个xlsm模板,编辑并保存它。该模板包含Macro,但我只是将数据添加到xlsm文件中。事实上,我认为Read和Edit正在工作(多亏了vs中的调试),问题是当我试图写。。。代码正在工作,没有错误,但当我尝试用Excel打开它时,它崩溃了。。
FileStream temp = new FileStream(xlsm_file, FileMode.Open, FileAccess.ReadWrite);
XSSFWorkbook workbook = (XSSFWorkbook)WorkbookFactory.Create(temp);
XSSFSheet sheet = (XSSFSheet)workbook.GetSheetAt(0);
workbook.SetSheetName(0, sheetname.Substring(0, Math.Min(sheetname.Length, 30)));
temp.Close();
FileStream toWrite = new FileStream(xlsm_file, FileMode.Open, FileAccess.ReadWrite);
workbook.Write(toWrite);
toWrite.Close();
例如,即使这样也会崩溃。。
有人有主意吗?谢谢
您需要以适当的格式编写宏嵌入文件,例如我读取.xltm文件并使用其MIME类型.xltm进行编写。请参阅下面的函数
public ActionResult DownloadXLTMFile()
{
try
{
//Get your macro enabled file after manipulation
MemoryStream excelMS = .....
//Using Resposne Stream to Make File Available for User to Download;
Response.Clear();
Response.ContentType = "application/vnd.ms-excel.template.macroEnabled.12";
Response.AddHeader("Content-Disposition", string.Format("attachment;filename={0}", "YourFileName.xltm"));
Response.BinaryWrite(excelMS.ToArray());
Response.End();
}
catch (Exception Ex)
{ }
finally
{}
return View();
}
您可以在此处找到合适的MIME类型