C#代码实现把Excel文件转化为DataTable,根据Excel的文件后缀名不同,用不同的方法来进行实现,下面通过根据Excel文件的两种后缀名(*.xlsx和*.xls)分别来实现。获取文件后缀名的方法是:Path.GetExtension(fileName)方法,通过引用:using System.IO;实现代码如下:(其中以下代码中出现的filename都是带盘符的绝对路径)

  • 根据Excel文件的后缀名不同调用的主方法

     private DataTable FileToDataTable(string fileName)
    {
    DataTable dt = new DataTable();
    string extendName = Path.GetExtension(fileName);//获取文件的后缀名
    switch (extendName.ToLower())
    {
    case ".xls":
    dt = XlsToDataTable(fileName);
    break;
    case ".xlsx":
    dt = XlsxToDataTable(fileName);
    break;
    default:
    break;
    }
    return dt;
    }
  • XlsToDataTable()

     private DataTable XlsToDataTable(string fileName)
    {
    DataTable dataTable = new DataTable();
    Stream stream = null;
    try
    {
    stream = File.OpenRead(fileName);
    HSSFWorkbook hssfworkbook = new HSSFWorkbook(stream);
    HSSFSheet hssfsheet = (HSSFSheet)hssfworkbook.GetSheetAt(hssfworkbook.ActiveSheetIndex);
    HSSFRow hssfrow = (HSSFRow)hssfsheet.GetRow();
    int lastCellNum = (int)hssfrow.LastCellNum;
    for (int i = (int)hssfrow.FirstCellNum; i < lastCellNum; i++)
    {
    DataColumn column = new DataColumn(hssfrow.GetCell(i).StringCellValue);
    dataTable.Columns.Add(column);
    }
    dataTable.TableName = hssfsheet.SheetName;
    int lastRowNum = hssfsheet.LastRowNum;
    //列名后,从TABLE第二行开始进行填充数据
    for (int i = hssfsheet.FirstRowNum + ; i < hssfsheet.LastRowNum; i++)//
    {
    HSSFRow hssfrow2 = (HSSFRow)hssfsheet.GetRow(i);
    DataRow dataRow = dataTable.NewRow();
    for (int j = (int)hssfrow2.FirstCellNum; j < lastCellNum; j++)//
    {
    dataRow[j] = hssfrow2.GetCell(j);//
    }
    dataTable.Rows.Add(dataRow);
    }
    stream.Close();
    }
    catch (Exception ex)
    {
    ScriptManager.RegisterStartupScript(Page, GetType(), "alertForm", "alert(' Xls to DataTable: " + ex.Message + "');", true);
    }
    finally
    {
    if (stream != null)
    {
    stream.Close();
    }
    }
    return dataTable;
    }
  • XlsxToDataTable()
    public DataTable XlsxToDataTable(string vFilePath)
    {
    DataTable dataTable = new DataTable();
    try
    {
    SLDocument sldocument = new SLDocument(vFilePath);
    dataTable.TableName = sldocument.GetSheetNames()[];
    SLWorksheetStatistics worksheetStatistics = sldocument.GetWorksheetStatistics();
    int startColumnIndex = worksheetStatistics.StartColumnIndex;
    int endColumnIndex = worksheetStatistics.EndColumnIndex;
    int startRowIndex = worksheetStatistics.StartRowIndex;
    int endRowIndex = worksheetStatistics.EndRowIndex;
    for (int i = startColumnIndex; i <= endColumnIndex; i++)
    {
    SLRstType cellValueAsRstType = sldocument.GetCellValueAsRstType(, i);
    dataTable.Columns.Add(new DataColumn(cellValueAsRstType.GetText(), typeof(string)));
    }
    for (int j = startRowIndex + ; j <= endRowIndex; j++)
    {
    DataRow dataRow = dataTable.NewRow();
    for (int i = startColumnIndex; i <= endColumnIndex; i++)
    {
    dataRow[i - ] = sldocument.GetCellValueAsString(j, i);
    }
    dataTable.Rows.Add(dataRow);
    }
    }
    catch (Exception ex)
    {
    throw new Exception("Xlsx to DataTable: \n" + ex.Message);
    }
    return dataTable;
    }

C#实现EXCEL表格转DataTable的更多相关文章

  1. C#调用NPOI组件读取excel表格数据转为datatable写入word表格中并向word中插入图片/文字/书签 获得书签列表

    调用word的com组件将400条数据导入word表格中耗时10分钟简直不能忍受,使用NPOI组件耗时4秒钟.但是NPOI中替换书签内容的功能不知道是不支持还是没找到. 辅助类 Excel表格数据与D ...

  2. DataTable数据与Excel表格的相互转换

    using Excel = Microsoft.Office.Interop.Excel; private static Excel.Application m_xlApp = null; /// & ...

  3. C#读取Excel表格中数据并返回datatable

    在软件开发的过程中,经常用到从excel表格中读取数据作为数据源,以下整理了一个有效的读取excel表格的方法. DataTable GetDataTable(string tableName,str ...

  4. 将Excel表格数据转换成Datatable

    /// <summary> /// 将Excel表格数据转换成Datatable /// </summary> /// <param name="fileUrl ...

  5. .NET环境下导出Excel表格的两种方式和导入两种类型的Excel表格

    一.导出Excel表格的两种方式,其中两种方式指的是导出XML数据类型的Excel(即保存的时候可以只需要修改扩展名为.xls)和真正的Excel这两种. using System; using Sy ...

  6. asp.net数据导出到excel表格,并设置表格样式

    1.首先在项目中添加引用

  7. 【c#操作office】--OleDbDataAdapter 与OleDbDataReader方式读取excel,并转换为datatable

    OleDbDataAdapter方式: /// <summary> /// 读取excel的表格放到DataTable中 ---OleDbDataAdapter /// </summ ...

  8. 用NPOI、C#操作Excel表格生成班级成绩单

    在C#中利用NPOI操作Excel表格非常方便,几乎上支持所有的Excel表格本身所有的功能,如字体设置.颜色设置.单元格合并.数值计算.页眉页脚等等. 这里准备使用NPOI生成一个班级成绩单Exce ...

  9. C#程序从Excel表格中读取数据并进行处理

    今天做了一个Excel表格数据处理的事情,因为数据量表较大(接近7000条)所以处理起来有点麻烦,于是写了一个程序, 先将程序记下以便将来查找. using System; using System. ...

随机推荐

  1. laravel构造函数和中间件执行顺序问题

    今天想重构下代码结构: BaseController.php 放置公共的中间件 class BaseController { public function __construct(){ $this- ...

  2. centOS 重启 php-fpm

     ps axo pid,%cpu,%mem,comm |grep php-fpm ps aux | grep php-fpm pkill -9 php-fpm /etc/init.d/php-fpm ...

  3. 【9104】&&【a103】阶乘和

    Time Limit: 10 second Memory Limit: 2 MB 问题描述 已知正整数n(n≤100),设s=1!+2!+3!+...+n!.其中"!"表示阶层,即 ...

  4. win10 uwp 使用 Microsoft.Graph 发送邮件

    在 2018 年 10 月 13 号参加了 张队长 的 Office 365 训练营 学习如何开发 Office 365 插件和 OAuth 2.0 开发,于是我就使用 UWP 尝试使用 Micros ...

  5. java 事件监听机制组成

    事件源(组件) 事件(Event) 监听器(Listener) 事件处理(引发事件后处理方式) 事件监听机制流程图 务必记牢: 确定事件源(容器或组件) 通过事件源对象的addXXXListener( ...

  6. 【HTML/CSS】置换元素

    置换元素: 一个内容不受CSS视觉格式化模型控制,CSS渲染模型并不考虑对此内容的渲染,且元素本身一般拥有固有尺寸(宽度,高度,宽高比)的元素,被称之为置换元素. 行内级置换和非置换元素的宽度定义 对 ...

  7. Linux 内核PCI 中断

    对于中断, PCI 是容易处理的. 在 Linux 启动时, 计算机的固件已经分配一个唯一的中 断号给设备, 并且驱动只需要使用它. 中断号被存储于配置寄存器 60 (PCI_INTERRUPT_LI ...

  8. 5.29 SD省队培训D1

    5.29 SD省队培训D1 自闭的一天 T1 梦批糼 先咕一咕(两天之内一定补上) T2 等你哈苏德 继续咕(一星期之内补上) T3喜欢最最痛 四十分做法: 首先,我们发现同一个点加两条额外边是一件非 ...

  9. 关于redux和react-redux使用combinereducers之后的问题

    最近用react写项目的时候,开始复习之前学过的redux,记录一下一些坑,以防忘记 我现在的redux目录下有这么些东西 首先是index.js import { createStore } fro ...

  10. mysql修改数据库密码

    方法1: 运行MySQL 5.7 Command Line Client,输入老的密码: use mysql: update user set authentication_string=passwo ...