将Excel导入到数据中

常用的方式的有两种:

1. 通过 Microsoft.Jet.OLEDB.4.0 或  Microsoft.ACE.OLEDB.12.0

Microsoft.ACE.OLEDB.12.0 需要安装 AccessDatatbaseEngine

http://download.microsoft.com/download/7/0/3/703ffbcb-dc0c-4e19-b0da-1463960fdcdb/AccessDatabaseEngine.exe

public DataTable ExcelToDataTable(string strExcelFileName, string strSheetName)
{
    string path = Server.MapPath(".")+"\\Common\\"+strExcelFileName;
    string conn1 = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + path +
                    ";Extended Properties=Excel 8.0;";
    string conn2 = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + path +
                   ";Extended Properties=‘Excel 12.0;HDR=Yes;IMEX=1‘";
    string strExcel = string.Format("select * from [{0}$]", strSheetName);
    DataSet ds = new DataSet();
    using (OleDbConnection conn = new OleDbConnection(conn2))
    {
        conn.Open();
        OleDbDataAdapter adapter = new OleDbDataAdapter(strExcel, conn);
        adapter.Fill(ds, strSheetName);
        conn.Close();
        return ds.Tables[strSheetName];
    }
}
//调用方式: DataTable dt =   ExcelToDataTable("Report.xls","list");

2.通过  NPOI 2.1.1

public DataTable ExcelToDataTable(string strFileName, int sheetIndex = 0)
{
    string path = Server.MapPath(".") + "\\Common\\" + strFileName;
    DataTable dt = new DataTable();
    HSSFWorkbook hssfworkbook = null;
    XSSFWorkbook xssfworkbook = null;
    string fileExt = Path.GetExtension(path);
    using (FileStream file = new FileStream(path, FileMode.Open, FileAccess.Read))
    {
        if (fileExt == ".xls")
            hssfworkbook = new HSSFWorkbook(file);
        else if (fileExt == ".xlsx")
            xssfworkbook = new XSSFWorkbook(file);
    }
    if (hssfworkbook != null)
    {
        HSSFSheet sheet = (HSSFSheet)hssfworkbook.GetSheetAt(sheetIndex);
        if (sheet != null)
        {
            System.Collections.IEnumerator rows = sheet.GetRowEnumerator();
            HSSFRow headerRow = (HSSFRow)sheet.GetRow(0);
            int cellCount = headerRow.LastCellNum;
            for (int j = 0; j < cellCount; j++)
            {
                HSSFCell cell = (HSSFCell)headerRow.GetCell(j);
                dt.Columns.Add(cell.ToString());
            }
            for (int i = (sheet.FirstRowNum + 1); i <= sheet.LastRowNum; i++)
            {
                HSSFRow row = (HSSFRow)sheet.GetRow(i);
                DataRow dataRow = dt.NewRow();
                for (int j = row.FirstCellNum; j < cellCount; j++)
                {
                    if (row.GetCell(j) != null)
                        dataRow[j] = row.GetCell(j).ToString();
                }
                dt.Rows.Add(dataRow);
            }
        }
    }
    else if (xssfworkbook != null)
    {
        XSSFSheet xSheet = (XSSFSheet)xssfworkbook.GetSheetAt(sheetIndex);
        if (xSheet != null)
        {
            System.Collections.IEnumerator rows = xSheet.GetRowEnumerator();
            XSSFRow headerRow = (XSSFRow)xSheet.GetRow(0);
            int cellCount = headerRow.LastCellNum;
            for (int j = 0; j < cellCount; j++)
            {
                XSSFCell cell = (XSSFCell)headerRow.GetCell(j);
                dt.Columns.Add(cell.ToString());
            }
            for (int i = (xSheet.FirstRowNum + 1); i <= xSheet.LastRowNum; i++)
            {
                XSSFRow row = (XSSFRow)xSheet.GetRow(i);
                DataRow dataRow = dt.NewRow();
                for (int j = row.FirstCellNum; j < cellCount; j++)
                {
                    if (row.GetCell(j) != null)
                        dataRow[j] = row.GetCell(j).ToString();
                }
                dt.Rows.Add(dataRow);
            }
        }
    }
    return dt;
}

//调用方式: DataTable dt = ExcelToDataTable("Report.xls");
时间: 2025-01-16 04:58:50

将Excel导入到数据中的相关文章

POI实现Excel导入数据库数据

POI实现Excel导入数据库数据 首先看一下我们导入的数据Excel中的数据格式是什么 ?上面是我们的一个数据导入时的模板信息,我们需要按照这样过的格式导入数据库数据. 针对这样的数据格式可以通过ReadExcelUtils的工具类去读取到 ReadExcelUtils readExcelUtils = new ReadExcelUtils(file.getInputStream(),fileName); 通过上述代码我们可以获取到ReadExcelUtils对象,再调用其readExcelL

C#将数据库导出成Excel,再从Excel导入到数据库中。

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Data.SqlClient; using System.IO; namespace CindyDatabaseProcess { class Program { static void Main(string[] args) { System.Data.DataTable dt1 = null; S

[办公自动化] 再读《让EXCEL飞》(从excel导入access数据时,union联合查询,数据源中没有包含可见的表格)

一年多以前就买了@Mrexcel的<让excel飞>这本书.整体思路是利用access结合excel,大幅度提高数据分析效率. 最近又拿出来看了看.第十五章,比高级筛选更“高级”,P241.主要讲述多表关联查询,可以适用于一对多的场景. P248:联接属性的三种类型. Union联合查询可以用来实现同表头的多表数据合并. 但是将数据倒回到excel时,发现老是报错. 提示错误信息如下:数据源中没有包含可见的表格. 后来发现原因和解决方法如下: 借助Access中的可视化查询设计器,可以很大程度

Excel 导入到Datatable 中,再使用常规方法写入数据库

首先呢?要看你的电脑的office版本,我的是office 2013 .为了使用oledb程序,需要安装一个引擎.名字为AccessDatabaseEngine.exe.这里不过多介绍了哦.它的数据库连接字符串是"Provider=Microsoft.Ace.OleDb.12.0;Data Source={0};Extended Properties='Excel 12.0; HDR=Yes; IMEX=1'" 所以,我们是使用ole来读取excel的. 1 excel 的文件内容:

Dynamic CRM 2013学习笔记(三十一)自定义用excel导入实体数据

有一个实体的子表数据量太大,于是客户想用execel来导入实体数据.首先想到的是用系统自带的Import Data,客户嫌太麻烦,比如lookup字段要做map等. 下面是具体的实现步骤: 一.定义excel数据模板 1. 利用系统自带的Download Template For Import下载系统自带的模板 2. 去掉不需要的列,比如有些列是自动计算,自动赋值 3. 保存为excel文件,并copy到crm server里的isv目录下 4. 定义一个按钮,并指定调用下面的js: // ex

java poi excel 导入导出数据

背景:1.pringmvc 框架下 的excel 导入导出   2.OI 操作office. 页面代码: <div class="modal fade bs-example-modal-lg" tabindex="-1" role="dialog" aria-labelledby="myLargeModalLabel" aria-hidden="true"> <div class=&quo

如何将excel导入到数据库中并在gridview中显示

在页面上导入个excel文件,将该excel中的数据导入到数据库中,并且在页面的gridview中把数据显示出来. 1.在Asp.net中怎样将Excel文件中的数据导入到GridView中呢? 首先我们将这张表中的数据转换为DataTable类型的数据源,做一个函数来解决这个问题 private DataTable createDataSource(string strPath) { stringstrCon; strCon = "Provider=Microsoft.Jet.OLEDB.4.

C# 之 Excel 导入一列中既有汉字又有数字:数字可以正常导入,汉字导入为空

今天在做一个Excel导入功能,一切开发就绪,数据可以成功导入.导入后检查数据库发现有一列既有汉字又有数字,数字正常导入,汉字为空.但是前面同样既有汉字又有数字的列可以导入成功. 查看excel 源文件,如下图: 仔细观察两列略有不同,前两列的数字单元格左上角有个绿色三角形,选中单元格,左边有一个信息显示“ 次单元格中的数字为文本形式,或者前面有撇号. ”,也就是 “ 以文本形式存储的数字 ”. 然后尝试选中内容列,右键设置单元格格式为“ 文本 ”,修改后如下图: 再次导入仍然失败,单元格左上角

c# SqlBulkCopy实现批量从数据集中把数据导入到数据中

今天遇到了一个导入类第一次见 SqlBulkCopy 可以实现从一个数据集导入到数据库中的表中 本来想从数据集中一条条遍历insert到库中 有了这个后发现: 只在把表与数据集的列做一下对应关系,再走一个WriteToServer()方法就全进库里了代码如下(con一定要open()): using (SqlConnection con = new SqlConnection("server=.;uid=sa;pwd=123;database=oa")) { con.Open(); u