ASP.NET读写Excel数据

本文详细介绍如何使用C#将DataTable数据导出为Excel文件,包括生成XML格式的Excel工作表及下载文件的过程。同时,提供了从Excel文件读取数据并转换为DataTable的方法,涵盖了连接字符串设置、异常处理及XML文件读取等关键步骤。
闲话少说,上代码。

DataTable导出成Excel文件:
 1None.gifpublic static void DataSetToExcel(DataSet p_dsExport,string p_strFileName,bool p_blnHaveHeaderText)
 2ExpandedBlockStart.gifContractedBlock.gif  dot.gif{
 3InBlock.gif   if (p_dsExport == null)
 4ExpandedSubBlockStart.gifContractedSubBlock.gif   dot.gif{
 5InBlock.gif    return ;
 6ExpandedSubBlockEnd.gif   }

 7InBlock.gif   string strContext=GenerateWorkSheet(p_dsExport);
 8InBlock.gif
 9InBlock.gif   DownloadExcelFile(strContext,p_strFileName);
10InBlock.gif
11ExpandedBlockEnd.gif  }

12None.gif
13None.gifpublic static string GenerateWorkSheet(DataSet p_dsExport)
14ExpandedBlockStart.gifContractedBlock.gif        dot.gif{
15InBlock.gif            System.Text.StringBuilder   strExcelXml=new System.Text.StringBuilder ();
16InBlock.gif            strExcelXml.Append(ExcelHeader());
17InBlock.gif            strExcelXml.Append(ExcelWorkSheetOptions()); 
18InBlock.gif            
19InBlock.gif
20InBlock.gif            foreach(DataTable dt in p_dsExport.Tables)
21ExpandedSubBlockStart.gifContractedSubBlock.gif            dot.gif{
22InBlock.gif                // Create First Worksheet tag
23InBlock.gif                strExcelXml.Append("<Worksheet ss:Name=\""+ dt.TableName +"\">");
24InBlock.gif                // Then Table Tag
25InBlock.gif                strExcelXml.Append("<Table>");
26InBlock.gif                strExcelXml.Append(GetHeaderText(dt));
27InBlock.gif                int intColCount=dt.Columns.Count;
28InBlock.gif                foreach(DataRow dr in dt.Rows)
29ExpandedSubBlockStart.gifContractedSubBlock.gif                dot.gif{
30InBlock.gif                    // Row Tag
31InBlock.gif                    strExcelXml.Append("<Row>\r\n");
32InBlock.gif                    for(int j=0;j<intColCount;j++)
33ExpandedSubBlockStart.gifContractedSubBlock.gif                    dot.gif{
34InBlock.gif                        // Cell Tags
35InBlock.gif                        strExcelXml.Append("<Cell ss:Index=\""+(j+1).ToString()+"\"><Data ss:Type=\"String\">");
36InBlock.gif                        strExcelXml.Append(System.Web.HttpUtility.HtmlEncode( ObjectToNullStr(dr[j]))); 
37InBlock.gif                        strExcelXml.Append("</Data></Cell>\r\n");
38ExpandedSubBlockEnd.gif                    }

39InBlock.gif                    strExcelXml.Append("</Row>\r\n");
40InBlock.gif                    
41ExpandedSubBlockEnd.gif                }

42InBlock.gif                strExcelXml.Append("</Table>");
43InBlock.gif                strExcelXml.Append("</Worksheet>"); 
44ExpandedSubBlockEnd.gif            }

45InBlock.gif            strExcelXml.Append("</Workbook>\r\n");
46InBlock.gif            return strExcelXml.ToString();
47ExpandedBlockEnd.gif        }

48None.gif
49None.gifprivate static void DownloadExcelFile(string p_strFileContext,string p_strFileName)
50ExpandedBlockStart.gifContractedBlock.gif        dot.gif{
51InBlock.gif            // Appending Headers            
52InBlock.gif            if (IsNullString(p_strFileName))
53ExpandedSubBlockStart.gifContractedSubBlock.gif            dot.gif{
54InBlock.gif                p_strFileName="Excel.xls";
55ExpandedSubBlockEnd.gif            }

56InBlock.gif            
57InBlock.gif            if (!p_strFileName.Trim().ToLower().EndsWith(".xls"))
58ExpandedSubBlockStart.gifContractedSubBlock.gif            dot.gif{
59InBlock.gif                p_strFileName += ".xls";
60ExpandedSubBlockEnd.gif            }

61InBlock.gif
62InBlock.gif            try
63ExpandedSubBlockStart.gifContractedSubBlock.gif            dot.gif{
64InBlock.gif                HttpContext.Current.Response.Clear();
65InBlock.gif                HttpContext.Current.Response.Buffer= true;
66InBlock.gif                p_strFileName = UrlEncode(p_strFileName);
67InBlock.gif                HttpContext.Current.Response.ContentType = "application/vnd.ms-excel";
68InBlock.gif                HttpContext.Current.Response.AppendHeader("content-disposition""attachment; filename=" + p_strFileName);
69ExpandedSubBlockEnd.gif            }

70InBlock.gif            catch
71ExpandedSubBlockStart.gifContractedSubBlock.gif            dot.gif{
72ExpandedSubBlockEnd.gif            }

73InBlock.gif            
74InBlock.gif                                    
75InBlock.gif            //Writeout the Content                
76InBlock.gif            HttpContext.Current.Response.Write(p_strFileContext);
77InBlock.gif            try
78ExpandedSubBlockStart.gifContractedSubBlock.gif            dot.gif{
79InBlock.gif                HttpContext.Current.Response.End();
80ExpandedSubBlockEnd.gif            }

81InBlock.gif            catch
82ExpandedSubBlockStart.gifContractedSubBlock.gif            dot.gif{
83ExpandedSubBlockEnd.gif            }

84InBlock.gif            
85ExpandedBlockEnd.gif        }

将Excel文件中的数据导入到DatSet

1None.gifprivate static string GetExcelConnectString(string p_strFileName,bool p_blnHaveHeaderText)
2ExpandedBlockStart.gifContractedBlock.gif        dot.gif{
3InBlock.gif            string strHDR=p_blnHaveHeaderText?"Yes":"No";
4InBlock.gif            string strRtn="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" 
5InBlock.gif                + p_strFileName 
6InBlock.gif                +"; Extended Properties=\"Excel 8.0; HDR="+strHDR+"\";";
7InBlock.gif            return strRtn;            
8ExpandedBlockEnd.gif        }

 1None.gifprivate void Button2_Click(object sender, System.EventArgs e)
 2ExpandedBlockStart.gifContractedBlock.gif        dot.gif{
 3InBlock.gif
 4InBlock.gif            //也可以使用右侧的路径    string filename = @"e:\Book1.xls";
 5InBlock.gif            string filename = Request.PhysicalApplicationPath + @"excel\Book1.xls";
 6InBlock.gif
 7InBlock.gif            System.Data.DataTable  dt = new DataTable();
 8InBlock.gif
 9InBlock.gif            //第二个参数若为false,则第一行数据做为datatable的数据存在。反之,则不。
10InBlock.gif            dt = GYRTExcel.ExcelToDataTable(filename,false);
11InBlock.gif            this.DataGrid1.DataSource = dt;
12InBlock.gif            this.DataGrid1.DataBind();
13ExpandedBlockEnd.gif        }

 1ExpandedBlockStart.gifContractedBlock.gif/**//// <summary>
 2InBlock.gif        /// 把 Excel 文件的数据导入到 DataTable 中
 3InBlock.gif        /// </summary>
 4InBlock.gif        /// <param name="p_strFileName">服务器上 Excel 文件的全路径</param>
 5InBlock.gif        /// <param name="p_blnHaveHeaderText">true 标示第一行是否是列名,默认值为 true </param>
 6ExpandedBlockEnd.gif        /// <returns></returns>

 7None.gif        public static DataTable ExcelToDataTable(string p_strFileName,bool p_blnHaveHeaderText)
 8ExpandedBlockStart.gifContractedBlock.gif        dot.gif{
 9InBlock.gif            return ExcelToDataTable(p_strFileName,p_blnHaveHeaderText,null);
10ExpandedBlockEnd.gif        }

11None.gif
12ExpandedBlockStart.gifContractedBlock.gif/**//// <summary>
13InBlock.gif        /// 把 Excel 文件的数据导入到 DataSet 中
14InBlock.gif        /// </summary>
15InBlock.gif        /// <param name="p_strFileName">服务器上 Excel 文件的全路径</param>
16InBlock.gif        /// <param name="p_blnHaveHeaderText">true 标示第一行是否是列名,默认值为 true</param>
17ExpandedBlockEnd.gif        /// <returns></returns>

18None.gif        public static DataSet ExcelToDataSet(string p_strFileName,bool p_blnHaveHeaderText)
19ExpandedBlockStart.gifContractedBlock.gif        dot.gif{
20InBlock.gif            using(OleDbConnection conn=
21InBlock.gif                      new OleDbConnection(GetExcelConnectString(p_strFileName,p_blnHaveHeaderText)))
22ExpandedSubBlockStart.gifContractedSubBlock.gif            dot.gif{
23InBlock.gif                DataSet dsRtn=new DataSet();
24InBlock.gif                try
25ExpandedSubBlockStart.gifContractedSubBlock.gif                dot.gif{
26InBlock.gif                    //如果不是标准的 Excel 文件则当作是 Xml 文件读取
                           //如果Excel文件的路径不对的话,通常会跳到catch中,并返回对文件无读写权限或文件已经被占用。
27InBlock.gif                    conn.Open();
28ExpandedSubBlockEnd.gif                }

29InBlock.gif                catch(Exception ex)
30ExpandedSubBlockStart.gifContractedSubBlock.gif                dot.gif{
31InBlock.gif                    return ReadXmlFile(p_strFileName,p_blnHaveHeaderText);
32ExpandedSubBlockEnd.gif                }

33InBlock.gif                
34InBlock.gif                DataTable dtExcelTable=conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables,null);
35InBlock.gif                if (dtExcelTable == null)
36ExpandedSubBlockStart.gifContractedSubBlock.gif                dot.gif{
37InBlock.gif                    return null;
38ExpandedSubBlockEnd.gif                }

39InBlock.gif                foreach (DataRow dr in dtExcelTable.Rows)
40ExpandedSubBlockStart.gifContractedSubBlock.gif                dot.gif{
41InBlock.gif                    string strTableName=ObjectToNullStr(dr["TABLE_NAME"]);
42InBlock.gif                    if (IsNullString(strTableName))
43ExpandedSubBlockStart.gifContractedSubBlock.gif                    dot.gif{
44InBlock.gif                        continue ;
45ExpandedSubBlockEnd.gif                    }

46InBlock.gif                    string strSheetName = strTableName.Substring(0,strTableName.Length-1); 
47InBlock.gif                    string strCommandText="select * from " + "[" + strTableName + "]";
48InBlock.gif                    
49InBlock.gif
50InBlock.gif                    OleDbDataAdapter daAdapter=new OleDbDataAdapter(strCommandText,conn);
51InBlock.gif                    DataTable dt=new DataTable(strSheetName);
52InBlock.gif                    daAdapter.FillSchema(dt,SchemaType.Source);
53InBlock.gif                    daAdapter.Fill(dt); 
54InBlock.gif                    dsRtn.Tables.Add(dt);                    
55ExpandedSubBlockEnd.gif                }

56InBlock.gif                conn.Close();
57InBlock.gif                return dsRtn;
58ExpandedSubBlockEnd.gif            }

59ExpandedBlockEnd.gif        }

转载于:https://www.cnblogs.com/friendwang1001/archive/2007/01/04/611509.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值