0
我在一個問題上掙扎了好幾個小時,但不知道問題出在哪裏以及如何解決。希望你能給我一些提示。我非常感謝。NPOI excel公開問題
以下代碼的主要思想是讀取文檔列表中的文檔並打開每個文檔(excel格式)並將工作表移動到destWorkbook,並最終將destWorkbook保存爲excel格式。
public bool GenerateMergedWorkbook(DocumentModelList documentlist)
{
HSSFWorkbook destWorkbook = new HSSFWorkbook();
IList<DocumentModel> downloadDocumentList = GetDownloadDocumentList(documentlist);
foreach (var document in downloadDocumentList)
{
if (!string.IsNullOrEmpty(document.documentpath))
{
MergeSheet(document.documentpath, document.code, destWorkbook);
}
}
string destDocumentPath = HttpContext.Current.Server.MapPath("~/UserTemplate/xxx.xls");
destWorkbook.Write(new FileStream(destDocumentPath, FileMode.Create, FileAccess.ReadWrite));
destWorkbook.Close();
destWorkbook = null;
return true;
}
private void MergeSheet(string documentPath, string code, HSSFWorkbook destWorkbook)
{
string filePath = HttpContext.Current.Server.MapPath(documentPath);
using (var fileStream = new FileStream(filePath, FileMode.Open))
{
HSSFWorkbook workbook = new HSSFWorkbook(fileStream);
bool moveSheetFlag = false;
for (int i = 0; i < workbook.NumberOfSheets; i++)
{
HSSFSheet sheet = workbook.GetSheetAt(i) as HSSFSheet;
if (sheet.SheetName.IndexOf(code) >= 0)
{
sheet.CopyTo(destWorkbook, sheet.SheetName, true, true);
moveSheetFlag = true;
break;
}
}
workbook.Close();
if (!moveSheetFlag)
{
string message = "xxxxxx";
throw new FormatException(message);
}
fileStream.Close();
}
}
和上面的代碼可以用名稱爲「xxx.xls」,但是當我嘗試打開該文件,就會彈出如下圖所示的消息產生了Excel,
我做了很多個小時的調查,仍然不知道,有人可以幫助我。非常感謝。
可能改善你的解決方案。在使用塊中聲明FileStream以使其關閉並處理。 EX。使用(FileStream stream = new FileStream(destDocumentPath,FileMode.Create,FileAccess.ReadWrite)){destWorkbook.Write(stream); } –
感謝您的建議,這是一個很好的做法。我會接受。 – Jacob