• Excel表格数据,存到数据库


    数据库可以导入数据到Excel表格,Excel当然也可以取出数据,存到数据库。

    思路:

    一,file控件选中xls,xlsx文件,上传到服务器。

    二,C# 读取文件的每行数据,存入Datatable。

    三。最后存入数据库

    第一步 ,上传文件大家都会,就不讲了。

    第三步, 获取了Datatable后,存入数据库就简单了:

    可以遍历DataRow添加,或者链接configuraion写sql语句。

    主要讲第二部,解析xls文件的内容到Datatable。

    使用下面这个类,就ok了,直接复制修改命名空间吧。       

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using NPOI;
    using NPOI.SS.UserModel;
    using System.Data;
    using System.IO;
    using NPOI.HSSF.UserModel;
    using NPOI.XSSF.UserModel;
    
    namespace SysAdmin.Models
    {
        static public class ImportExcel
        {
            public static DataTable GetExcelDataTable(string filePath)
            {
                IWorkbook Workbook;
                DataTable table = new DataTable();
                try
                {
                    using (FileStream fileStream = new FileStream(filePath, FileMode.Open, FileAccess.Read))
                    {
                        //XSSFWorkbook 适用XLSX格式,HSSFWorkbook 适用XLS格式
                        string fileExt = Path.GetExtension(filePath).ToLower();
                        if (fileExt == ".xls")
                        {
                            Workbook = new HSSFWorkbook(fileStream);
                        }
                        else if (fileExt == ".xlsx")
                        {
                            Workbook = new XSSFWorkbook(fileStream);
                        }
                        else
                        {
                            Workbook = null;
                        }
                    }
                }
                catch (Exception ex)
                {
                    throw ex;
                }
    
                //定位在第一个sheet
                ISheet sheet = Workbook.GetSheetAt(0);
                //第一行为标题行
                IRow headerRow = sheet.GetRow(0);
                int cellCount = headerRow.LastCellNum;
                int rowCount = sheet.LastRowNum;
    
                //循环添加标题列
                for (int i = headerRow.FirstCellNum; i < cellCount; i++)
                {
                    DataColumn column = new DataColumn(headerRow.GetCell(i).StringCellValue);
                    table.Columns.Add(column);
                }
    
                //数据
                for (int i = (sheet.FirstRowNum + 1); i <= rowCount; i++)
                {
                    IRow row = sheet.GetRow(i);
                    if (row.FirstCellNum==1)
                    {
                        return table;
                    }
    
                    DataRow dataRow = table.NewRow();
                    if (row != null)
                    {
                        for (int j = row.FirstCellNum; j < cellCount; j++)
                        {
                          
                            if (row.GetCell(j)!=null)
                            {
                                dataRow[j] = GetCellValue(row.GetCell(j));
                            }
                        }
                    }
                    table.Rows.Add(dataRow);
                }
                return table;
            }
    
            private static string GetCellValue(ICell cell)
            {
                if (cell == null)
                {
                    return string.Empty;
                }
    
                switch (cell.CellType)
                {
                    case CellType.Blank:
                        return string.Empty;
                    case CellType.Boolean:
                        return cell.BooleanCellValue.ToString();
                    case CellType.Error:
                        return cell.ErrorCellValue.ToString();
                    case CellType.Numeric:
                    case CellType.Unknown:
                    default:
                        return cell.ToString();
                    case CellType.String:
                        return cell.StringCellValue;
                    case CellType.Formula:
                        try
                        {
                            HSSFFormulaEvaluator e = new HSSFFormulaEvaluator(cell.Sheet.Workbook);
                            e.EvaluateInCell(cell);
                            return cell.ToString();
                        }
                        catch
                        {
                            return cell.NumericCellValue.ToString();
                        }
                }
            }
    
        }
    
    }
    View Code

    ImportExcel.GetExcelDataTable(filePath)  //调用该类下面的GetExcelDataTable()方法 就ok了

    filePath  //刚刚上传文件的路径

  • 相关阅读:
    延迟任务的实现方式
    brpc的安装20220620可用
    tmux和zsh的个性化配置针对无法连接外网的机器
    VimForCpp离线安装
    记录一个vim配置
    LeetCode No1051. 高度检查器
    LeetCode No890. 查找和替换模式
    LeetCode No63. 不同路径 II
    LeetCode No64. 最小路径和
    个人资料
  • 原文地址:https://www.cnblogs.com/liuzheng0612/p/11882345.html
Copyright © 2020-2023  润新知