NPOI excel 未决问题
NPOI excel open issue
我在一个问题上苦苦挣扎了好几个小时,但不知道问题出在哪里,也不知道如何解决。希望你能给我一些提示。非常感谢。
以下代码的主要思想是读取documentlist中的文档并打开每个文档(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,但是当我尝试打开该文件时,它会弹出如下消息,
我调查了好几个小时,还是不知道,谁能帮帮我。非常感谢。
突然找到答案了,
destWorkbook.Write(new FileStream(destDocumentPath, FileMode.Create, FileAccess.ReadWrite));
应该像下面这样关闭流,
var stream = new FileStream(destDocumentPath, FileMode.Create, FileAccess.ReadWrite);
destWorkbook.Write(stream);
stream.Close();
我在一个问题上苦苦挣扎了好几个小时,但不知道问题出在哪里,也不知道如何解决。希望你能给我一些提示。非常感谢。
以下代码的主要思想是读取documentlist中的文档并打开每个文档(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,但是当我尝试打开该文件时,它会弹出如下消息,
我调查了好几个小时,还是不知道,谁能帮帮我。非常感谢。
突然找到答案了,
destWorkbook.Write(new FileStream(destDocumentPath, FileMode.Create, FileAccess.ReadWrite));
应该像下面这样关闭流,
var stream = new FileStream(destDocumentPath, FileMode.Create, FileAccess.ReadWrite);
destWorkbook.Write(stream);
stream.Close();