asp.net中使用OLEDB操作Excel

最近项目中需要导出Excel数据表单,试了好几种方法,都感觉不怎么顺手,然后老大喊我去看看OLEDB,我接着花世间去学习了一下,感觉还挺不错的。

开始在网上找了一些代码,

然后需要配置连接字符串

我电脑上安装的office 2007:

所以连接字符串为:"Provider=Microsoft.Ace.OleDb.12.0;Data Source=" + filepath + ";Extended properties=\"Excel 12.0; HDR=Yes;\"";

HDR=Yes 表示第一行包含列名,在计算行数时就不包含第一行

IMEX   0:导入模式,1:导出模式:2混合模式

在VS上一跑,发现会报错

网上去找了一下原因,发现很多人都遇到过这种问题,所以答案很快就找到了,原来是没有安装“AccessDatabaseEngine.exe”这个插件。

于是去网上下载安装之后,先前的代码就能够跑了。

下面是一些简单的操作语句:

1.从Excel里读取数据

string str1="select * from [Sheet1$]";

2.更新Excel里的数据

string str2="update [Sheet1$] set FieldName1=‘aaa‘ where FiledName2=‘30‘";

3.向Excel里写入数据

string str3="insert into [Sheet1$](FieldName1,FieldName2,...) values(‘a‘,‘b‘,...)";

对于非标准结构的Excel表格,可以采用以下方法:

4.读取数据

string str4="select * from [Sheet1$A3:F20]";

5.更新数据

string str5="update [Sheet1$A9:F15] set FieldName=‘bbb‘ where AnotherFieldName=‘b3‘";

6.插入数据

string str6="insert into [Sheet1$A9:F15](FildName1,FieldName2,..) values(‘a‘,‘b‘,...)";

下面是我的一些测试代码:

向Excel写入数据

string strFilePath = "E:\\excel1.xls";
        string str1 = "insert into [Sheet1$](商户ID,商家名称)values('DJ001','点击科技')";//excel1.xls必须已经存在,而且已有列名
        DoOleSql(str1,strFilePath);

新建Excel表并写入数据

string filepaths = "E:\\excel2.xls";
        string stra= "CREATE TABLE CustomerInfo ([CustomerID] VarChar,[Customer] VarChar)";
        string strb = "insert into CustomerInfo(CustomerID,Customer)values('DJ001','点击科技')";
        DoOleSql(stra,filepaths);
        DoOleSql(strb,filepaths);

以上两个代码中用到的DoOleSql函数如下:

 protected void DoOleSql(string sql, string filepath)
    {
        OleDbConnection conn = new OleDbConnection();
        conn.ConnectionString = "Provider=Microsoft.Ace.OleDb.12.0;Data Source=" + filepath + ";Extended properties=\"Excel 12.0; HDR=Yes;\"";
        try
        {//打开连接
            conn.Open();
        }
        catch (Exception e)
        {
            //Response.Write(e.ToString());
        }
        OleDbCommand olecommand = new OleDbCommand(sql, conn);
        try
        {//执行语句
            olecommand.ExecuteNonQuery();
        }
        catch (Exception eee)
        {
            //Response.Write(eee.ToString());
            conn.Close();
        }
        finally
        {
            conn.Close();//关闭数据库
        }
        conn.Close();
    }

将DataTable里的数据导出到Excel里

protected void Button3_Click(object sender, EventArgs e)
    {
        SqlHelp sqla = new SqlHelp();
        string strfaca = "select * from tOAPower order by LoginID asc";
        DataTable dta = sqla.GetDataTable(strfaca);
        sqla.SqlClose();
        //string modelpath = "E:\\staff.xlsx";
        string realpath = "E:\\staff.xls";
        DataTable2Excel(dta,realpath,500);

    }

    /// <summary>
    /// 根据DataTable生成Excel
    /// </summary>
    /// <param name="dataTable">数据源</param>
    /// <param name="fileName">要保存的路径</param>
    /// <param name=" rowsCount ">当一个工作表最多的行数rowsCount,当超过时,则新建工作表。</param>
    /// <returns>生成成功则返回True,否则返回False</returns>
    public static bool DataTable2Excel(DataTable dataTable, string fileName, int rowsCount)
    {
        bool rt = false;//用于返回值
        if (dataTable == null && rowsCount < 1)
        {
            return false;
        }
        int rowNum = dataTable.Rows.Count;//获取行数
        int colNum = dataTable.Columns.Count;//获取列数
        int SheetNum = (rowNum - 1) / rowsCount + 1; //获取工作表数
        string sqlText = "";//带类型的列名
        string sqlValues = "";//值
        string colCaption = "";//列名
        for (int i = 0; i < colNum; i++)
        {
            if (i != 0)
            {
                sqlText += " , ";
                colCaption += " , ";
            }
            sqlText += "[" + dataTable.Columns[i].Caption.ToString() + "] VarChar";//生成带VarChar列的标题
            colCaption += "[" + dataTable.Columns[i].Caption.ToString() + "]";//生成列的标题
        }
        String sConnectionString = "Provider=Microsoft.Ace.OleDb.12.0;Data Source=" + fileName + ";Extended properties=\"Excel 12.0; HDR=Yes;\"";
        OleDbConnection cn = new OleDbConnection(sConnectionString);
        try
        {
            //判断文件是否存在,存在则先删除
            if (File.Exists(fileName))
            {
                File.Delete(fileName);
            }
            int sheet = 1;//表数
            int dbRow = 0;//数据的行数
            //打开连接
            cn.Open();
            while (sheet <= SheetNum)
            {
                string sqlCreate = "CREATE TABLE [Sheet" + sheet.ToString() + "] (" + sqlText + ")";
                OleDbCommand cmd = new OleDbCommand(sqlCreate, cn);
                //创建Excel文件
                cmd.ExecuteNonQuery();
                for (int srow = 0; srow < rowsCount; srow++)
                {
                    sqlValues = "";
                    for (int col = 0; col < colNum; col++)
                    {
                        if (col != 0)
                        {
                            sqlValues += " , ";
                        }
                        sqlValues += "'" + dataTable.Rows[dbRow][col].ToString() + "'";//拼接Value语句
                    }
                    String queryString = "INSERT INTO [Sheet" + sheet.ToString() + "] (" + colCaption + ") VALUES (" + sqlValues + ")";
                    cmd.CommandText = queryString;
                    cmd.ExecuteNonQuery();//插入数据
                    dbRow++;//目前数据的行数自增
                    if (dbRow >= rowNum)
                    {
                        //目前数据的行数等于rowNum时退出循环
                        break;
                    }
                }
                sheet++;
            }
            rt = true;
        }
        catch
        {
        }
        finally
        {
            cn.Close();
        }

        return rt;

    }  

大体情况就是这个样子,我现在还有一些小问题,比如导出的Excel文档,不是严格意义上的Excel文档,打开的时候会出现这种情况

如果各位有解决方法的,请指教哦。

时间: 2024-08-26 09:33:56

asp.net中使用OLEDB操作Excel的相关文章

oledb 操作 excel

oledb excel http://wenku.baidu.com/search?word=oledb%20excel&ie=utf-8&lm=0&od=0 [Asp.net]常见数据导入Excel,Excel数据导入数据库解决方案,总有一款适合你! http://www.cnblogs.com/wolf-sun/p/3589605.html asp.net操作Excel(向excel模板添加数据) http://www.cnblogs.com/Silverlight_Team/

OLEDB操作Excel

使用OLEDB操作Excel 的方法 OleDbConnection conn = null;            try            {              //fileName 表示要操纵的Excel的文件路径,如果excel不存在,现创建它,可以通过模版文件复制创建.                string strConn;                strConn = "Provider=Microsoft.Jet.OLEDB.4.0;" +     

C#开发中使用Npoi操作excel实例代码

C#开发中使用Npoi操作excel实例代码 出处:西西整理 作者:西西 日期:2012/11/16 9:35:50 [大 中 小] 评论: 0 | 我要发表看法 Npoi 是什么? 1.整个Excel表格叫做工作表:WorkBook(工作薄),包含的叫页(工作表):Sheet:行:Row:单元格Cell. 2.Npoi 下载地址:http://npoi.codeplex.com/releases/view/38113 3.Npoi 学习系列教程推荐:http://www.cnblogs.com

php中使用PHPExcel操作excel(xls)文件

读取中文的xls.csv文件会有问题,网上找了下资料,发现PHPExcel类库好用,官网地址:http://phpexcel.codeplex.com/ 1.读取xls文件内容  代码如下 复制代码 <?php     //向xls文件写入内容     error_reporting(E_ALL);     ini_set('display_errors', TRUE);        include 'Classes/PHPExcel.php';                include

.NET中使用OleDb读取Excel

在.NET中可以用OleDb(Object linking and embeding DataBase)来访问Excel 1 using System; 2 using System.Data; 3 using System.Windows.Forms; 4 using System.Data.OleDb; 5 6 namespace ExcelDemo 7 { 8 public partial class Form1 : Form 9 { 10 public Form1() 11 { 12 I

asp.net(C#)之NPOI&quot;操作Excel

1.首先到网上下载"NPOI.DLL",引用. 2.新建一个操作类"ExcelHelper.cs": using System.Collections.Generic; using System.Data; using System.IO; using System.Linq; using NPOI.HSSF.UserModel; using NPOI.SS.UserModel; using NPOI.XSSF.UserModel; public class Exc

ASP.NET中的文件操作(文件信息,新建,移动,复制,重命名,上传,遍历)(亲测详细)

做了几天的文件操作,现在来总结一下,错误之处,还望指点!以文件为例,如果对文件夹操作,基本上将File换为Directory即可(例:FileInfo file = new FileInfo(Path);与DirectoryInfo directory = new DirectoryInfo (Path);) 1获取文件信息 在知道文件相对路径的情形,下面代码可以获取文件的详细信息 1 public static void fileinfo(string Path) 2 { 3 Path = S

OleDB操作Excel链接字符串

Office2003:         strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + pathName + ";Extended Properties='Excel 8.0;HDR=Yes;IMEX=1;'"; Office2007/2010/2013:         strConn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=

OLE-DB 操作excel 基本

1 方法用例 *&---------------------------------------------------------------------* *& 本程序总结了常用的 ABAP 对 EXCEL 的操作,包括如下子例程 *& 方法名 方法说明 *& (1) create_excel 创建 excel *& (2) insert_row 插入行 *& (3) fill_cell 填充单元格 *& (4) columnwidth 调整列宽