c# NPIO写入EXCEL每次打开EXCEL都提示出错。

ROGER DENG 2020-08-31 10:36:49
错误如下,烦高手指点一下

...全文
10791 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
appo_li 2020-09-12
  • 打赏
  • 举报
回复
可以改用spire,贼简单
一落山川_ 2020-09-11
  • 打赏
  • 举报
回复
引用 10 楼 ROGER DENG 的回复:
[quote=引用 8 楼 Peng45 的回复:]我之前也遇到过,主要是样式问题,你可以断点看看应该有内部异常,但程序不会报错。
我猜到多半也是,只是一直排查不出来,暂时就用xls了。[/quote] 你可是试试这种写法: XSSFWorkbook workbook; using (FileStream stream = File.OpenRead(filename)) { workbook = new XSSFWorkbook(stream); } ISheet sheet = workbook.GetSheetAt(0); 数据处理..... using (FileStream fs = new FileStream(filename, FileMode.Create, FileAccess.Write)) { workbook.Write(fs); } 导出前先删掉之前的文件,或者用一个新的不同的文件名
  • 打赏
  • 举报
回复
我用XLS确定无问题的。还有你检查一下代码。它们操作是独立一个WORK里面的处理的。然后关闭。
快乐起航2020 2020-09-10
  • 打赏
  • 举报
回复
首先是npoi
快乐起航2020 2020-09-10
  • 打赏
  • 举报
回复
https://www.cnblogs.com/imyzhou/p/10848936.html
kousansky 2020-09-10
  • 打赏
  • 举报
回复
版本或者excel文件问题
一落山川_ 2020-09-09
  • 打赏
  • 举报
回复
我之前也遇到过,主要是样式问题,你可以断点看看应该有内部异常,但程序不会报错。
ROGER DENG 2020-09-09
  • 打赏
  • 举报
回复
引用 8 楼 Peng45 的回复:
我之前也遇到过,主要是样式问题,你可以断点看看应该有内部异常,但程序不会报错。
我猜到多半也是,只是一直排查不出来,暂时就用xls了。
ROGER DENG 2020-09-09
  • 打赏
  • 举报
回复
哦。。。。是这样吗
ROGER DENG 2020-09-01
  • 打赏
  • 举报
回复
引用 6 楼 Aoss丶 的回复:
如果是 .NetCore项目,试下用DotNetCore.NPOI
net.frameworks
Aoss丶 2020-09-01
  • 打赏
  • 举报
回复
如果是 .NetCore项目,试下用DotNetCore.NPOI
ROGER DENG 2020-09-01
  • 打赏
  • 举报
回复
果然我的代码,用xls格式读写就没有任何问题。用xlsx始终是有点问题
杨友山 2020-08-31
  • 打赏
  • 举报
回复
看不出来,有时间的话楼主可以看看我之前写的npio读取,写入excel的几篇博客 excel读取:https://blog.csdn.net/yysyangyangyangshan/article/details/42614209 excel写入:https://blog.csdn.net/yysyangyangyangshan/article/details/42837841 以及在网页中写入excel并提示保存至用户指定路径: https://blog.csdn.net/yysyangyangyangshan/article/details/47904119
ROGER DENG 2020-08-31
  • 打赏
  • 举报
回复
本人代码 class dt2excel { public static void DataTableToExcel(XSSFWorkbook workbook, XSSFSheet sheet, DataTable dt, string strFileName, int startline, List<string> columns,List<string> columnsfixed) { using (var fileStream = new FileStream(strFileName, FileMode.OpenOrCreate)) { ///格式选项 ICellStyle cellStyle = workbook.CreateCellStyle(); IFont font = workbook.CreateFont(); font.FontName = "宋体"; font.FontHeightInPoints = 12; cellStyle.DataFormat = 194; cellStyle.SetFont(font); cellStyle.Alignment = NPOI.SS.UserModel.HorizontalAlignment.Center; cellStyle.VerticalAlignment = VerticalAlignment.Center; cellStyle.BorderBottom = NPOI.SS.UserModel.BorderStyle.Thin; cellStyle.BorderLeft = NPOI.SS.UserModel.BorderStyle.Thin; cellStyle.BorderRight = NPOI.SS.UserModel.BorderStyle.Thin; cellStyle.BorderTop = NPOI.SS.UserModel.BorderStyle.Thin; cellStyle.WrapText = true; sheet.GetRow(1).CreateCell(7).CellStyle = cellStyle; sheet.GetRow(1).GetCell(7).SetCellValue(DateTime.Now.ToString("yyyy/MM/dd"));//标题 sheet.GetRow(2).CreateCell(7).CellStyle = cellStyle; sheet.GetRow(2).GetCell(7).SetCellValue(dt.Rows.Count); if (dt != null && dt.Rows.Count > 0) { for (int i = 0; i < dt.Rows.Count; i++) { IRow newRow = sheet.CreateRow(i + 1 + startline);//row从第1行开始写,并非第0行,第0行为title. // IRow newRow = sheet.GetRow(i + 1 + startline); for (int j = 0; j < columns.Count; j++) { int columnnr = int.Parse(OperateIniFile.ReadIniData("columns", columns[j], "")); ICell cell = newRow.CreateCell(columnnr - 1); cell.SetCellValue(dt.Rows[i][j] == null ? "" : dt.Rows[i][j].ToString()); //cell.SetCellValue(dt); //cell.SetCellValue(float.Parse((dt.Rows[i][j]).ToString())); cell.CellStyle = cellStyle; } for (int k = 0; k < columnsfixed.Count; k++) { int columnnr = int.Parse(OperateIniFile.ReadIniData("columnsfixed", columnsfixed[k], "")); ICell cell = newRow.CreateCell(columnnr - 1); cell.SetCellValue(columnsfixed[k]); cell.CellStyle = cellStyle; } } // IRow newRow = sheet.CreateRow(i + 1 + startline);//row从第1行开始写,并非第0行,第0行为title. // // IRow newRow = sheet.GetRow(i + 1 + startline); // //} } workbook.Write(fileStream); workbook.Clear(); workbook.Close(); } //return filePath; } /// 用模板导出Excel /// </summary> /// <param name="table"></param> /// <param name="strFileName">导出路径</param> /// <param name="templetPath">模板路径</param> /// <param name="startRow">从第几行开始写数据,从1开始</param> public static void ExportExcelByTemple(System.Data.DataTable dtSource, string strFileName, string templetPath, int startRow, List<string> columns,List<string> columnsfixed) { try { XSSFWorkbook workbook = getWorkBook(templetPath); XSSFSheet sheet = getSheet(workbook); string outfile = strFileName; DataTableToExcel(workbook, sheet, dtSource, strFileName, startRow,columns,columnsfixed); //writeData(workbook,sheet, dtSource, strFileName, rowHeight, startRow); //saveData(workbook, strFileName); } catch (Exception ex) { //LogInfo.Log(ex); throw ex; } } /// <summary> /// 解析Excel模板,返回WorkBook /// </summary> /// <param name="templetPath"></param> /// <returns></returns> private static XSSFWorkbook getWorkBook(string templetPath) { FileStream file = new FileStream(templetPath, FileMode.Open, FileAccess.Read); XSSFWorkbook workbook = new XSSFWorkbook(file); return workbook; } /// <summary> /// 返回Sheet /// </summary> /// <param name="workbook"></param> /// <returns></returns> private static XSSFSheet getSheet(XSSFWorkbook workbook) { return (XSSFSheet)workbook.GetSheetAt(0); } private static void saveData(XSSFWorkbook workbook, string strFileName) { //保存 using (MemoryStream ms = new MemoryStream()) { using (FileStream fs = new FileStream(strFileName,FileMode.Create, FileAccess.Write)) { workbook.Write(fs); } } } }
hongliangc5dn 2020-08-31
  • 打赏
  • 举报
回复
读取 xls 和 xlsx 是使用两个不同的 work
ROGER DENG 2020-08-31
  • 打赏
  • 举报
回复
引用 1 楼 杨友山 的回复:
看不出来,有时间的话楼主可以看看我之前写的npio读取,写入excel的几篇博客 excel读取:https://blog.csdn.net/yysyangyangyangshan/article/details/42614209 excel写入:https://blog.csdn.net/yysyangyangyangshan/article/details/42837841 以及在网页中写入excel并提示保存至用户指定路径: https://blog.csdn.net/yysyangyangyangshan/article/details/47904119
感谢关注,您的帖子是用的xls. 我的是xlsx。好像不是一个类型文件

110,556

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧