2016-07-26 100 views
1

我在我的c#代碼中使用了POI數週,並且發現並解決了問題,我無法解決:Xlsm。使用POI讀/寫XLSM

我必須打開一個xlsm模板,編輯並保存它。該模板包含宏,但我只是將數據添加到xlsm文件。 其實,我認爲閱讀和編輯工作找到(感謝在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(); 

例如,即使這種崩潰..

是具有創意的人? 謝謝!

回答

0

您需要以適當的格式編寫您的宏嵌入文件,例如我讀取.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類型here