使用POI读/写XLSM

我在我的C#代码中使用POI几个星期,我发现和问题,我不能解决:Xlsm。

我必须打开一个xlsm模板,编辑并保存它。 该模板包含macros,但我只是将数据添加到xlsm文件。 其实,我认为,阅读和编​​辑工作find(感谢在vs中debugging),问题是当我试图写…代码工作,没有错误,但是当我试图用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(); 

例如,即使这崩溃..

有人有想法吗? 谢谢 !

您需要以适当的格式编写您的macrosembedded文件,例如我读取.xltm文件并使用其MIMEtypes的.xltm编写。 看下面的function

  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(); } 

你可以在这里find你的适当的MIMEtypes