您的位置:首页 > 其它

Ext.Net 1.x_Ext.Net.GridPanel之导出EXCEL

2011-12-12 08:13 519 查看
在运用EXT.NET过程中尝试了很多导出EXCEL的结果都失败了。

干脆就用DEMO中的案列吧。建立一个EXCEL.XSL

<xsl:stylesheet version="1.0"
    xmlns="urn:schemas-microsoft-com:office:spreadsheet"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
 xmlns:msxsl="urn:schemas-microsoft-com:xslt"
 xmlns:user="urn:my-scripts"
 xmlns:o="urn:schemas-microsoft-com:office:office"
 xmlns:x="urn:schemas-microsoft-com:office:excel"
 xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet">

  <xsl:template match="/">
    <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"
      xmlns:html="http://www.w3.org/TR/REC-html40">
      <xsl:apply-templates/>
    </Workbook>
  </xsl:template>

  <xsl:template match="/*">
    <Worksheet>
      <xsl:attribute name="ss:Name">
        <xsl:value-of select="local-name(/*/*)" />
      </xsl:attribute>
      <Table x:FullColumns="1" x:FullRows="1">
        <Row>
          <xsl:for-each select="*[position() = 1]/*">
            <Cell>
              <Data ss:Type="String">
                <xsl:value-of select="local-name()" />
              </Data>
            </Cell>
          </xsl:for-each>
        </Row>
        <xsl:apply-templates/>
      </Table>
    </Worksheet>
  </xsl:template>

  <xsl:template match="/*/*">
    <Row>
      <xsl:apply-templates/>
    </Row>
  </xsl:template>

  <xsl:template match="/*/*/*">
    <Cell>
      <Data ss:Type="String">
        <xsl:value-of select="." />
      </Data>
    </Cell>
  </xsl:template>

</xsl:stylesheet>


JS:

<script type="text/javascript">
            var template = '<span style="color:{0};">{1}</span>';

            var change = function (value) {
                return String.format(template, (value > 0) ? 'green' : 'red', value);
            }

            var pctChange = function (value) {
                return String.format(template, (value > 0) ? 'green' : 'red', value + '%');
            }
            var exportData = function (format) {
                var store = GridPanel1.store;
                store.directEventConfig.isUpload = true;

                var records = store.reader.readRecords(store.proxy.data).records,

                values = [];

                for (i = 0; i < records.length; i++) {
                    var obj = {}, dataR;

                    if (store.reader.meta.id) {
                        obj[store.reader.meta.id] = records[i].id;
                    }

                    dataR = Ext.apply(obj, records[i].data);

                    if (!Ext.isEmptyObj(dataR)) {
                        values.push(dataR);
                    }
                }

                store.submitData(values);

                store.directEventConfig.isUpload = false;
            };

        </script>

后台代码:

protected void Store1_Submit(object sender, StoreSubmitDataEventArgs e)
    {
        string format = "yyyyMMddhhss";
        string name = "PO_Planning" + System.DateTime.Now.ToString(format) + ".xls"; 

        XmlNode xml = e.Xml;

        this.Response.Clear();
        this.Response.ContentType = "application/vnd.ms-excel";
        this.Response.AddHeader("Content-Disposition", "attachment; filename="+name);
        XslCompiledTransform xtExcel = new XslCompiledTransform();
        xtExcel.Load(Server.MapPath("Excel.xsl"));
         xtExcel.Transform(xml, null, Response.OutputStream);

        this.Response.End();
    }

调用:

<ext:Button ID="btnxls" runat="server" Text="导出Excel" Icon="PageExcel">
                            <Listeners>
                                <Click Handler="exportData('xls');" />
                            </Listeners>
                        </ext:Button>

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: