欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

asp.net core导入excel

程序员文章站 2024-01-13 12:25:10
接昨天的 "导出" 导入excel内容 对比昨天导出的内容增加了一行实体属性名称作为标题行,这样到转换为实体的时候才能找到对应的属性。 导入代码 excel文件路径可以通过上传控件上传到服务器再读取。 注意 如果你导入和发现bool类型不能正确读取请修改一下两个文件的两个地方: DataTableE ......

接昨天的

导入excel内容

asp.net core导入excel
对比昨天导出的内容增加了一行实体属性名称作为标题行,这样到转换为实体的时候才能找到对应的属性。

导入代码

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类型不能正确读取请修改一下两个文件的两个地方:

datatableextensions的public static ienumerable

else if (p.propertytype == typeof(bool))
{
    p.setvalue(ob, bool.parse(row[p.name].tostring()), null);
}

excelhelper的private datatable readsheettodatatable(int headerrowno, isheet sheet)方法替换为如下代码或增加一个bool类型判断

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;
}