asp.net 导出excel(xls)文件 资料 --- 之一: xml文件格式导出

 

     1.通过xml文件格式导出:

 

        http://www.xue5.com/itedu/200802/107215_9.html 

 

 

 

记得以前直接把gridview导出称excel,虽然很简单,但是却不能控制具体细节,尤其是字符串的“00001”到了excel中必定变为整数1,一直没找到解决办法,直到在codeproject上找到这个函数,它直接把数据写称excel可以读取的xml文档,仅仅把扩展名改为xls,但是效果却很好。

 

 

 



public static void DataSetExportToExcel(DataSet source, string fileName)
 {

       System.IO.StreamWriter excelDoc;
       excelDoc = new System.IO.StreamWriter(fileName);
       const string startExcelXML = "<xml version> <Workbook " +
             "xmlns="urn:schemas-microsoft-com:office:spreadsheet" " +
              " xmlns:o="urn:schemas-microsoft-com:office:office"  " +
             "xmlns:x="urn:schemas-    microsoft-com:office:" +
              "excel"  xmlns:ss="urn:schemas-microsoft-com:" +
              "office:spreadsheet">  <Styles>  " +
              "<Style ss:ID="Default" ss:Name="Normal">  " +
              "<Alignment ss:Vertical="Bottom"/>  <Borders/>" +
             "  <Font/>  <Interior/>  <NumberFormat/>" +
              "  <Protection/>  </Style>  " +
              "<Style ss:ID="BoldColumn">  <Font " +
              "x:Family="Swiss" ss:Bold="1"/>  </Style>  " +
              "<Style     ss:ID="StringLiteral">  <NumberFormat" +
              " ss:Format="@"/>  </Style>  <Style " +

               "ss:ID="Decimal">  <NumberFormat " + 

             

        <Font x:Family="Swiss" ss:Bold="1"/>

 

       </Style>

       <Style ss:ID="StringLiteral">

         <NumberFormat ss:Format="@"/>

       </Style>

       <Style ss:ID="Decimal">

         <NumberFormat ss:Format="0.0000"/>

       </Style>

       <Style ss:ID="Integer">

         <NumberFormat ss:Format="0"/>

       </Style>

       <Style ss:ID="DateLiteral">

         <NumberFormat ss:Format="mm/dd/yyyy;@"/>

       </Style>

       </Styles>

       <Worksheet ss:Name="Sheet1">

       </Worksheet>

       </Workbook>

       */

        excelDoc.Write(startExcelXML);

        excelDoc.Write("<Worksheet ss:Name="Sheet" + sheetCount + "">");

        excelDoc.Write("<Table>");

        excelDoc.Write("<Row>");

        for (int x = 0; x < source.Tables[0].Columns.Count; x++)        

       {

            excelDoc.Write("<Cell ss:StyleID="BoldColumn"><Data ss:Type="String">");

            excelDoc.Write(source.Tables[0].Columns[x].ColumnName);

 

excelDoc.Write("</Data></Cell>");

 

        }

        excelDoc.Write("</Row>");

        foreach (DataRow x in source.Tables[0].Rows)

        {

            rowCount++;

            //if the number of rows is > 64000 create a new page to continue output

            if (rowCount == 64000)

            {

                rowCount = 0;

                sheetCount++;

                excelDoc.Write("</Table>");

                excelDoc.Write(" </Worksheet>");

                excelDoc.Write("<Worksheet ss:Name="Sheet" + sheetCount + "">");

                excelDoc.Write("<Table>");

            }

            excelDoc.Write("<Row>"); //ID=" + rowCount + "

            for (int y = 0; y < source.Tables[0].Columns.Count; y++)

 

           {

 

                System.Type rowType;

                rowType = x[y].GetType();

                switch (rowType.ToString())

                {

                    case "System.String":

                        string XMLstring = x[y].ToString();

                        XMLstring = XMLstring.Trim();

                        XMLstring = XMLstring.Replace("&", "&");

                        XMLstring = XMLstring.Replace(">", ">");

                        XMLstring = XMLstring.Replace("<", "<");

                        excelDoc.Write("<Cell ss:StyleID="StringLiteral">" +

                                       "<Data ss:Type="String">");

                        excelDoc.Write(XMLstring);

                        excelDoc.Write("</Data></Cell>");

                        break;

                    case "System.DateTime":

                        //Excel has a specific Date Format of YYYY-MM-DD followed by  

           &nb

 

sp;                              

 

              //the letter 'T' then hh:mm:sss.lll Example 2005-01-31T24:01:21.000

 

 

                        //The Following Code puts the date stored in XMLDate 

                        //to the format above

                        DateTime XMLDate = (DateTime)x[y];

                        string XMLDatetoString = ""; //Excel Converted Date

                        XMLDatetoString = XMLDate.Year.ToString() +

                             "-" +

                             (XMLDate.Month < 10 ? "0" +

                             XMLDate.Month.ToString() : XMLDate.Month.ToString()) +

                             "-" +

                             (XMLDate.Day < 10 ? "0" +

                             XMLDate.Day.ToString() : XMLDate.Day.ToString()) +

                             "T" +

                             (XMLDate.Hour < 10 ? "0" +

                             XMLDate.Hour.ToString() : XMLDate.Hour.ToString()) +

                             ":" +

                             (XMLDate.Minute < 10 ? "0" +

                             XMLDate.Minute.ToString() : XMLDate.Minute.ToString()) +

                             ":" +

 

                          (XMLDate.Second < 10 ? "0" +

 

                             XMLDate.Second.ToString() : XMLDate.Second.ToString()) +

                             ".000";

                        excelDoc.Write("<Cell ss:StyleID="DateLiteral">" +

                                     "<Data ss:Type="DateTime">");

                        excelDoc.Write(XMLDatetoString);

                        excelDoc.Write("</Data></Cell>");

                        break;

                    case "System.Boolean":

                        excelDoc.Write("<Cell ss:StyleID="StringLiteral">" +

                                    "<Data ss:Type="String">");

                        excelDoc.Write(x[y].ToString());

                        excelDoc.Write("</Data></Cell>");

                        break;

                    case "System.Int16":

                    case "System.Int32":

                    case "System.Int64":

                    case "System.Byte":

                        excelDoc.Write("<Cell ss:StyleID="Integer">" +

 

                 "<Data ss:Type="Number">");

 

                        excelDoc.Write(x[y].ToString());

                        excelDoc.Write("</Data></Cell>");

                        break;

                    case "System.Decimal":

                    case "System.Double":

                        excelDoc.Write("<Cell ss:StyleID="Decimal">" +

                              "<Data ss:Type="Number">");

                        excelDoc.Write(x[y].ToString());

                        excelDoc.Write("</Data></Cell>");

                        break;

                    case "System.DBNull":

                        excelDoc.Write("<Cell ss:StyleID="StringLiteral">" +

                              "<Data ss:Type="String">");

                        excelDoc.Write("");

                        excelDoc.Write("</Data></Cell>");

                        break;

                    default:

                        throw (new Exception(rowType.ToString() + " not handled."));

                    }

                }

                excelDoc.Write("</Row>");

                

 

}

 

                    excelDoc.Write("</Table>");

                    excelDoc.Write(" </Worksheet>");

                    excelDoc.Write(endExcelXML);

                    excelDoc.Close();

                    }

 

 原文链接: http://www.xue5.com/itedu/200802/107215_9.html

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值