导出excel表格,导入excel表格

本文介绍如何使用HTML和OLEDB技术将数据导出到Excel文件中,并提供了具体的实现代码示例。包括处理单元格合并、避免数字格式转换等问题。

1.将html输出成excel

如果有单元格合并。

复制代码
    protected void btnExportHtml_Click(object sender, EventArgs e)
        {
            string path = Request.MapPath("~/Downloaded/data.html");
            Response.Clear();
            Response.Buffer = true;
            Response.AppendHeader("Content-Disposition", "attachment;filename=" + DateTime.Now.ToString("yyyyMMddHHmmss") + ".xls");
            Response.ContentEncoding = System.Text.Encoding.UTF8;
            Response.ContentType = "application/vnd.ms-excel";
            string data;
            using (StreamReader sr = new StreamReader(path))
            {
                data = sr.ReadToEnd();
            }
            Response.Write(data);
            this.EnableViewState = false;   
        }
复制代码

2.用oledb输出成excel

如果没有单元格合并。

复制代码
  <div>
        <asp:RadioButtonList runat="server" ID="rblExtension">
            <asp:ListItem Text="Excel 2003" Selected="True" Value="2003" />
            <asp:ListItem Text="Excel 2007" Value="2007" />
        </asp:RadioButtonList>
    </div>
    <asp:Button Text="导出" runat="server" ID="btnExport" OnClick="btnExport_Click" /><br />
    <asp:HyperLink ID="hlDownload" runat="server"></asp:HyperLink>
复制代码

 

代码:

复制代码
    
    protected DataTable RetrieveData()
        {
            DataTable dt = new DataTable();
            using (OracleConnection conn = new OracleConnection(ConfigurationManager.ConnectionStrings["ConnectionString"].ToString()))

{
                OracleDataAdapter da = new OracleDataAdapter("select ename,job from emp", conn);
                da.Fill(dt);
            }
            return dt;
        }

    protected void ExportToExcel(string strConn, DataTable dtOrcl)
        {
            using (OleDbConnection conn = new OleDbConnection(strConn))
            {
                OleDbCommand cmd = new OleDbCommand("create table emp(ename varchar(10),job varchar(9))", conn);
                conn.Open();
                cmd.ExecuteNonQuery();
                cmd.CommandText = "Insert Into emp(ename,job) values (?,?)";
                cmd.Parameters.Add("ename", OleDbType.VarChar, 10, "ename");
                cmd.Parameters.Add("job", OleDbType.VarChar, 9, "job");
OleDbDataAdapter da
= new OleDbDataAdapter("select ename,job from emp", conn); da.InsertCommand = cmd; foreach (DataRow dr in dtOrcl.Rows) { dr.SetAdded(); } da.Update(dtOrcl); } }     protected void btnExport_Click(object sender, EventArgs e) { string strDownloadFileName = ""; string strExcelConn = ""; if (rblExtension.SelectedValue == "2003") { // Excel 97-2003 strDownloadFileName = "~/Downloaded/" + DateTime.Now.ToString("yyyyMMddHHmmss") + ".xls"; strExcelConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + Server.MapPath(strDownloadFileName) + ";Extended Properties='Excel 8.0;HDR=Yes'"; } else { // Excel 2007 strDownloadFileName = "~/Downloaded/" + DateTime.Now.ToString("yyyyMMddHHmmss") + ".xlsx"; strExcelConn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + Server.MapPath(strDownloadFileName) + ";Extended Properties='Excel 12.0 Xml;HDR=Yes'"; } // Retrieve data from SQL Server table. DataTable dtSQL = RetrieveData(); // Export data to an Excel spreadsheet. ExportToExcel(strExcelConn, dtSQL); hlDownload.Text = "Click here to download file."; hlDownload.NavigateUrl = strDownloadFileName; }
复制代码

 

避免‘0001‘这种的文字,自动转换为数字 ‘1’

(参考http://www.cnblogs.com/lovenets2008/archive/2008/05/06/1184234.html)

 

复制代码
<table>
        <thead>
            <tr>
                <th>No.</th>
                <th>dept</th>
                <th>Name</th>
                <th>Job</th>
            </tr>
        </thead>
        <tr>
            <td style="vnd.ms-excel.numberformat:@">001</td>
            <td rowspan="3">IT</td>
            <td>Anny</td>
            <td>Engineer</td>
        </tr>
        <tr>
            <td style="vnd.ms-excel.numberformat:@">002</td>
            <td>Jim</td>
            <td>Engineer</td>
        </tr>
        <tr>
            <td>003</td>
            <td>Tonney</td>
            <td>Engineer</td>
        </tr>
    </table>
复制代码

 结果:

No. dept Name Job
001 IT Anny Engineer
002 Jim Engineer
3 Tonney Engineer

 

 另外参考:http://blog.youkuaiyun.com/llhhyy1989/article/details/6704378

使用DataTable导出Excel

复制代码
private  StringWriter GetStringWriter(DataTable dt)
    {
        StringWriter sw = new StringWriter();
        //读列名
        foreach (DataColumn dc in dt.Columns)
            sw.Write(dc.ColumnName + "\t");
        //读列值
        //重新的一行
        sw.Write(sw.NewLine);
              if (dt != null)
        {
            foreach (DataRow dr in dt.Rows)
            {
                for (int i = 0; i < dt.Columns.Count; i++)
                {
                    sw.Write(dr[i].ToString() + "\t");
                }
                sw.Write(sw.NewLine);
            }
        }
        sw.Close();
            
        return sw;
    }
复制代码

 

复制代码
protected void ExcelImport(DataTable dt, string ExportFileName)
    {
        StringWriter sw = GetStringWriter(dt);
        //当前编码
        HttpContext.Current.Response.ContentEncoding = System.Text.Encoding.GetEncoding("GB2312");
        //把输出的文件名进行编码
        string fileName = HttpUtility.UrlEncode (ExportFileName, System.Text.Encoding.UTF8);
        //文件名
        string str = "attachment;filename=" + fileName + ".xls";
        //把文件头输出,此文件头激活文件下载框
        HttpContext.Current.Response.AppendHeader("Content-Disposition", str);//http报头文件
        HttpContext.Current.Response.ContentType = "application/ms-excel";
        this.Page.EnableViewState = false;
        Response.Write(sw);
        Response.End();
 }
复制代码

 

复制代码
 protected void Button1_Click(object sender, EventArgs e)
    {
        DataTable dt = new SelectCourseManager().SelectByCollegeAndProperty(ddlCourseProperty.Text, ddlCollege.SelectedValue);
        if (dt.Rows.Count == 0)
            Page.ClientScript.RegisterStartupScript(Page.GetType(), "message", "<script language='javascriopt' defer>alert('没有数据,不需要导出哈');</script>");
        else
        { 
            //导出Excel
            ExcelImport(dt, "课程");
            
         }

    }
复制代码

 

 导入excel 表格

<asp:Button ID="btnImport" runat="server" Text="导入" OnClick="btnImport_Click" />

 

复制代码
protected DataTable RetrieveData(string strConn)
        {
            DataTable dtExcel = new DataTable();
            using (OleDbConnection conn = new OleDbConnection(strConn))
            {
                OleDbDataAdapter da = new OleDbDataAdapter("select ename,job from  [emp$]", conn);
                da.Fill(dtExcel);
            }
            return dtExcel;
        }
复制代码

 

复制代码
protected void ImportExcelFile(DataTable dtExcel)
        {
            using (OracleConnection conn = new OracleConnection(ConfigurationManager.ConnectionStrings["ConnectionStringTestDb"].ToString()))
            {                
                OracleCommand comm = new OracleCommand();
                comm.Connection = conn;
                OracleTransaction transaction = conn.BeginTransaction(IsolationLevel.ReadCommitted);
                comm.Transaction = transaction;
                comm.CommandType = CommandType.Text;
                for (int i = 0; i < dtExcel.Rows.Count; i++)
                {
                    try
                    {
                        comm.CommandText = "insert into emp(ename,job) values(:ename,:job)";
                        string ename = dtExcel.Rows[i]["ename"].ToString();
                        string job = dtExcel.Rows[i]["job"].ToString();
                        comm.Parameters.Add(":ename", ename);
                        comm.Parameters.Add(":job", job);
                        if (conn.State == ConnectionState.Closed)
                        {
                            conn.Open();
                        }
                        comm.ExecuteNonQuery();
                    }
                    catch (Exception e)
                    {
                        transaction.Rollback();
                        conn.Close();
                        throw e;
                    }                    
                }
                transaction.Commit();
                conn.Close();
            }
        }
复制代码

 

复制代码
 protected void btnImport_Click(object sender, EventArgs e)
        {
            string strUploadFileName = "~/UploadFiles/data.xlsx";
       //Excel 2003 用:"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + Server.MapPath(strUploadFileName) + ";Extended Properties='Excel 8.0;HDR=YES;'"; 
            string strExcelConn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + Server.MapPath(strUploadFileName) + ";Extended Properties='Excel 12.0 Xml;HDR=YES;'";
            DataTable dtExcel1 = RetrieveData(strExcelConn);
            ImportExcelFile(dtExcel1);
        }
复制代码

## 01、数据介绍 数据整理全国30个省份制造业细分行业产值,能够反映一定时期内细分行业工业生产总规模和总水平的指标,是计算工业生产发展速度和主要比例关系、计算工业产品销售率等其他经济指标的基础。先进制造业数据可用于两业融合测算。 数据名称:全国30省-制造业细分行业产值/先进制造业细分行业产值数据 数据年份:2001-2022年 ## 02、数据指标 农副食品加工业;食品制造业;饮料制造业;烟草制造业;纺织业;纺织服装鞋帽制造业;皮革、毛皮、羽毛(绒)极其制品业;木材加工及木、竹、藤、棕、草制品业;家具制造业;造纸及纸制品业;印刷业和记录媒介的复制;文教体育用品制造业;石油加工、炼焦及核燃料加工业化;学原料及化学制品制造业;医药制造业;化学纤维制造业;橡胶和塑料制品制品业;非金属矿物制品业;黑色金属冶炼及压延加工业;有色金属冶炼及压延加工业;金属制品业;通用设备制造业;专用设备制造业;汽车制造业;其他运输设备制造业;电气机械及器材制造业;通信设备计算机及其他电子设备制造业;仪器仪表及文化、办公用机械制造业;其他制造业;废弃资源和废旧材料回收加工业;制造业总产值 印刷业和记录媒介的复制;石油加工、炼焦及核燃料加工业;化学原料及化学制品制造业;医药制造业;橡胶和塑料制品制品业;非金属矿物制品业;黑色金属冶炼及压延加工业;有色金属冶炼及压延加工业;金属制品业;通用设备制造业;专用设备制造业;汽车制造业;其他运输设备制造业;电气机械及器材制造业;通信设备计算机及其他电子设备制造业;仪器仪表及文化、办公用机械制造业;废弃资源和废旧材料回收加工业
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值