王黎雯图片,少女穿越之立海大篇,咸鱼怎么做好吃
接昨天的
对比昨天导出的内容增加了一行实体属性名称作为标题行,这样到转换为实体的时候才能找到对应的属性。
public iactionresult inportexcel() { var file = "d:\\a.xls"; var excelheper = new excelhelper(); var dt = excelheper.excelimport(file,2); var list = dt.tolist<student>(); return content(""); }
excel文件路径可以通过上传控件上传到服务器再读取。
如果你导入和发现bool类型不能正确读取请修改一下两个文件的两个地方:
else if (p.propertytype == typeof(bool)) { p.setvalue(ob, bool.parse(row[p.name].tostring()), null); }
private datatable readsheettodatatable(int headerrowno, isheet sheet) { var dt = new datatable(); irow headerrow = sheet.getrow(headerrowno); int cellcount = headerrow.lastcellnum; for (int j = 0; j < cellcount; j++) { icell cell = headerrow.getcell(j); dt.columns.add(cell.tostring()); } for (int i = (headerrowno + 1); i <= sheet.lastrownum; i++) { irow row = sheet.getrow(i); datarow datarow = dt.newrow(); for (int j = 0; j < cellcount; j++) { if (row.getcell(j) == null) { continue; } icell cell = row.getcell(j); switch (cell.celltype) { case celltype.unknown: case celltype.error: throw new exception($"第{i + 1}行,列【{dt.columns[j].columnname}】,单元格格式错误"); break; case celltype.numeric: if (dateutil.iscelldateformatted(cell)) { datarow[j] = cell.datecellvalue; } else { datarow[j] = cell.numericcellvalue; } break; case celltype.blank: datarow[j] = ""; break; case celltype.boolean: datarow[j] = cell.booleancellvalue; break; case celltype.formula: datarow[j] = cell.cellformula ; break; case celltype.string: default: datarow[j] = cell.stringcellvalue; break; } //datarow[j] = row.getcell(j).tostring(); } bool existsvalue = false; foreach (datacolumn column in dt.columns) { if (datarow[column.columnname] == null || string.isnullorempty(datarow[column.columnname].tostring())) { continue; } existsvalue = true; break; } if (existsvalue) { dt.rows.add(datarow); } } return dt; }
如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复
Blazor server side 自家的一些开源的, 实用型项目的进度之 CEF客户端
.NET IoC模式依赖反转(DIP)、控制反转(Ioc)、依赖注入(DI)
vue+.netcore可支持业务代码扩展的开发框架 VOL.Vue 2.0版本发布
网友评论