c#操作Excel保存到Datatable方法

例子1

NPOI 是 POI 项目的 .NET 版本。POI是一个开源的Java读写Excel、WORD等微软OLE2组件文档的项目。
NPOI下载地址:http://npoi.codeplex.com/
NPOI 读取excel 存入 Datatable,简易代码:
public DataTable Upload(string path)
        {
            DataTable dt = new DataTable();
            using (FileStream fs = new FileStream(path, FileMode.Open, FileAccess.Read)) //打开xls文件
            {
                string fileExt = System.IO.Path.GetExtension(path);
                IWorkbook wk;
                if (fileExt == ".xls")
                {
                    //excel 03
                    wk = new HSSFWorkbook(fs);
                }
                else if (fileExt == ".xlsx")
                {
                    //excel 07
                    wk = new XSSFWorkbook(fs);
                }
                else
                {
                    return null;
                }
                ISheet sheet = wk.GetSheetAt(0);   //读取第一个Sheel表数据
                System.Collections.IEnumerator rows = sheet.GetRowEnumerator();
                while (rows.MoveNext())
                {
                    IRow row = (IRow)rows.Current;
                    DataRow dr = dt.NewRow();
                    for (int i = 0; i < row.LastCellNum; i++)
                    {
                        ICell cell = row.GetCell(i);
                        if (cell == null)
                        {
                            dr[i] = null;
                        }
                        else
                        {
                            if (dt.Columns.Count < i + 1)
                            {
                                string colname = Convert.ToChar(((int)'A') + i).ToString();//有局限最多到Z列
                                dt.Columns.Add(colname);
                                //lable1.Content = colname;
                                dr[i] = cell.ToString();
                            }
                            dr[i] = cell.ToString();
                        }
                    }
                    //dt = ImportDt(sheet,0,true);
                    dt.Rows.Add(dr);
                }
                wk = null;
                sheet = null;
                return dt;
            }
}

三种读取Excel方法

---------------------------------------------------方法一

/// <summary>
        /// 解析Excel,返回DataTable
        /// </summary>
        /// <param name="fileName"></param>
        /// <returns></returns>
        public static System.Data.DataTable ImpExcel(string fileName)
        {
            System.Data.DataTable dt = new System.Data.DataTable();
            try
            {
                Microsoft.Office.Interop.Excel.Application app;
                Workbooks wbs;
                Worksheet ws;
                app = new Microsoft.Office.Interop.Excel.Application();
                wbs = app.Workbooks;
                wbs.Add(fileName);
                ws = (Worksheet)app.Worksheets.get_Item(1);
                     int rows = ws.UsedRange.Rows.Count;
                int columns = ws.UsedRange.Columns.Count;
                string bookName = ws.Name;
                 dt = LoadDataFromExcel(filePath, bookName).Tables[0];
                //for (int i = 1; i < rows + 1; i++)
                //{
                //    DataRow dr = dt.NewRow();
                //    for (int j = 1; j <= columns; j++)
                //    {

                //        _Excel.Range range = ws.get_Range(app.Cells[i, j], app.Cells[i, j]);
                //        range.Select();
                //        if (i == 1)
                //            dt.Columns.Add("Columns" + j);// dt.Columns.Add(app.ActiveCell.Text.ToString())可以直接用第一行作为列名,单合并单元格后,读取出来后列名相同会报错,所以最好不用
                //        dr[j - 1] = app.ActiveCell.Text.ToString();
                //    }
                //    dt.Rows.Add(dr);
                //}

            
                //newdt = dt.Clone();
                //for (int i = 0; i < dt.Rows.Count; i++)
                //{
                //    if (dt.Rows[i][5].ToString() != "" && dt.Rows[i][6].ToString() != "" && dt.Rows[i][7].ToString() != "" && dt.Rows[i][8].ToString() != "" || i == 0)
                //    newdt.ImportRow(dt.Rows[i]);
                //}
                KillProcess(app);
                return dt;
            }
            catch (Exception ex)
            {
                MessageBox.Show("数据绑定Excel失败! 失败原因:"+ex.Message, "提示信息", MessageBoxButtons.OK, MessageBoxIcon.Information);
                return dt;
            }
        }

 

----------------------------------------------------方法二

/// <summary>
        /// 解析Excel
        /// </summary>
        /// <param name="filePath"></param>
        /// <param name="name"></param>
        /// <returns></returns>
        public static DataSet LoadDataFromExcel(string filePath, string name)
        {
            try
            {
                string strConn;
                //   strConn = " Provider = Microsoft.Jet.OLEDB.4.0 ; Data Source = " + filePath + ";Extended Properties=Excel 8.0";
                strConn = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + filePath + ";Extended Properties='Excel 12.0 Xml;HDR=Yes;IMEX=1'";
                OleDbConnection OleConn = new OleDbConnection(strConn);
                OleConn.Open();
                string sql = "SELECT * FROM [" + name + "$]";//可是更改Sheet名称,比如sheet2,等等 
                OleDbDataAdapter OleDaExcel = new OleDbDataAdapter(sql, OleConn);
                DataSet OleDsExcle = new DataSet();
                OleDaExcel.Fill(OleDsExcle, name);
                OleConn.Close();
                return OleDsExcle;
            }
            catch (Exception err)
            {
                MessageBox.Show("数据绑定Excel失败! 失败原因:" + err.Message, "提示信息", MessageBoxButtons.OK, MessageBoxIcon.Information);
                return null;
            }
        }——————————————————插入Excel

/// <summary>
  /// 写入Excel文档
  /// </summary>
  /// <param name="Path">文件名称</param>
  public bool SaveFP2toExcel(string Path)
  {
   try
   {
    string strConn = "Provider=Microsoft.Jet.OLEDB.4.0;" +"Data Source="+ Path +";"+"Extended Properties=Excel 8.0;";
    OleDbConnection conn = new OleDbConnection(strConn);
    conn.Open(); 
    System.Data.OleDb.OleDbCommand cmd=new OleDbCommand ();
    cmd.Connection =conn;
    for(int i=0;i<fp2.Sheets [0].RowCount -1;i++)
    {
     if(fp2.Sheets [0].Cells[i,0].Text!="")
     {
      cmd.CommandText ="INSERT INTO [sheet1$] (工号,姓名,部门,职务,日期,时间) VALUES('"+fp2.Sheets [0].Cells[i,0].Text+ "','"+
       fp2.Sheets [0].Cells[i,1].Text+"','"+fp2.Sheets [0].Cells[i,2].Text+"','"+fp2.Sheets [0].Cells[i,3].Text+
       "','"+fp2.Sheets [0].Cells[i,4].Text+"','"+fp2.Sheets [0].Cells[i,5].Text+"')";
      cmd.ExecuteNonQuery ();
     }
    }
    conn.Close ();
    return true;
   }
   catch(System.Data.OleDb.OleDbException ex)
   {
    System.Diagnostics.Debug.WriteLine ("写入Excel发生错误:"+ex.Message );
   }
   return false;
  }

//新增、修改
    _Excel.Application app = new _Excel.ApplicationClass();
            app.Visible = false;
            _Excel.Workbook book = app.Workbooks.Open(UpdateExcelPath, System.Type.Missing, System.Type.Missing, System.Type.Missing, System.Type.Missing, System.Type.Missing, System.Type.Missing, System.Type.Missing, System.Type.Missing, System.Type.Missing, System.Type.Missing, System.Type.Missing, System.Type.Missing, System.Type.Missing, System.Type.Missing);
            _Excel.Worksheet sheet = (_Excel.Worksheet)book.ActiveSheet;
            for (int i = 0; i < dt.Rows.Count; i++)
            {
                sheet.Cells[i + 2, 1] = dt.Rows[i][0].ToString();
                sheet.Cells[i + 2, 2] = dt.Rows[i][1].ToString();
            }
            book.Save();
            book.Close(sheet, UpdateExcelPath, System.Type.Missing);
            app.Quit();
            System.GC.Collect();

——————————————————修改Excel的值
//修改第一行Name的值为张三
string strComm = "update [Sheet1$] set Name='张三' WHERE 工号='132'";
OleDbConnection myConn = new OleDbConnection(strConn);
myConn.Open();
OleDbCommand com = new OleDbCommand(strComm, myConn);
com.ExecuteNonQuery();
myConn.Close();

时间: 2024-09-21 21:17:44

c#操作Excel保存到Datatable方法的相关文章

Python使用xlrd模块操作Excel数据导入的方法

  本文实例讲述了Python使用xlrd模块操作Excel数据导入的方法.分享给大家供大家参考.具体分析如下: xlrd是一个基于python的可以读取excel文件的产品.和pyExcelerator相比,xlrd的主要特点在于读的功能比较强大,提供了表单行数.列数.单元格数据类型等pyExcelrator无法提供的详细信息,使得开发人员无须了解表单的具体结构也能对表单中的数据进行正确的分析转换. 但是xlrd仅仅提供了读取excel文件的功能,不能像pyExcelrator那样生成exce

mysqlcommandbuilder-mysql中修改参数保存到datatable再更新到数据库出现问题

问题描述 mysql中修改参数保存到datatable再更新到数据库出现问题 这里我使用mysqlcommandbuilder实现这一功能这样使用正确吗,有什么其他好的建议 解决方案 用不着什么command builder,你的问题是你的hardwareparameter_delectcommand没有值.你怎么写的.你直接用 MySQLCommand cmd = new MySQLCommand(sql) 解决方案二: 产生异常了.你填充的参数是不是不正确

通过ado.net查询出来的数据保存到datatable后,数据类型变了,如何破?

问题描述 使用ddtek.oracle,就是普通的从oracle数据库中提取数据,oracle中的数据类型都是整形,sql语句也是普通的加减乘除,但是最后保存到datatable中,有些数据类型变成了string类型,或者应该整形的却变成了浮点型,这是为什么?有人碰到过吗? 解决方案 解决方案二:这可能跟查询语句有关,但是我用sum(x)/sum(y),x和y都是整形,这样最后出来的数据类型是string类型,这让人没有办法接受啊.之所以纠结数据类型的问题,是因为后续还需要用datatable中

Java操作Excel的2种方法--Poi,jExcelApi

老师让查一些java操作excel的方法,在网上查了半天,看的也不太懂,就把有价值的总结一下. 发现java操作Excel的第三方jar包比较多,有两套比较有影响的API可供使用,一个是POI,一个是jExcelAPI. 一.jExcelAPI jExcelAPI是一个韩国程序员的作品,虽然没有POI那样血统高贵,但是在笔者的使用过程中,感觉简单方便,对中文支持非常好,功能也比较强大.它的下载地址是:http://www.andykhan.com/jexcelapi/   它的特征有如下描述:

poi 操作Excel 中cell.setAsActiveCell();方法不可用,源码如下

问题描述 //切换当前表格为可活动的表格,无法实现作用???????importjava.io.FileInputStream;importjava.io.FileOutputStream;importjava.io.IOException;importorg.apache.poi.hslf.model.Sheet;importorg.apache.poi.hssf.usermodel.HSSFCell;importorg.apache.poi.hssf.usermodel.HSSFRow;im

php中将一个对象保存到Session中的方法

 这篇文章主要介绍了php中将一个对象保存到Session中的方法,涉及php操作对象及session的技巧,具有一定参考借鉴价值,需要的朋友可以参考下     本文实例讲述了php中将一个对象保存到Session中的方法.分享给大家供大家参考.具体如下: 要保存对象到session其实很简单,我们可以使用session_register()函数,下面是使用范例 person_class.inc.php如下: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17

如何在C++中将数据库数据分行和列保存到Excel中

如何在C++中将数据库数据分行和列保存到Excel中? 程序中的数据在StringGrid控件中显示的,那如何按照StringGrid显示的格式分行分列保存到Excel表格呢?请看如下两种方法的实现: 第一种方法:采用的一格一格填充数据 Variant ExcelApp,WorkBook1,WorkSheet1; //--------------------------------------------------------------------------- __fastcall TFo

jQuery实现拖拽页面元素并将其保存到cookie的方法_jquery

本文实例讲述了jQuery实现拖拽页面元素并将其保存到cookie的方法.分享给大家供大家参考,具体如下: 实现的效果就是页面内的图片可拖拽到任意位置,并将所在位置保存.下次打开页面依然可见.本文是作demo用,实际开发中,位置的数据应保存到数据库中 好了,开始 1.准备工作 a.jquery(1.7.2),ui,cookie插件,json插件.一些图片(本文是5张) 2.页面 上代码 <div class="img_list" id="img_list"&g

怎样在C#中实现读取EXCEL 中的图表并直接保存到WORD中

问题描述 有没有大神,知道怎么在C#中将EXCEL中的图表直接保存到WORD文档中的指定位置中?在网上搜了一些,只查到将EXCEL中的图表保存本地然后用WORD读取,但本人想直接将EXCEL中的图表保存到WORD中,有没有人知道怎么操作啊?占用大家一点时间了没有具体代码的话,给我讲讲具体实现步骤也行谢谢啦 解决方案 解决方案二:楼主应该去C#版块提问,那边C#牛人多!解决方案三:在Excel2003和Word2003中开始记录宏,手动完成所需功能,结束记录宏,按Alt+F11键,查看刚才记录的宏