说说你要实现的目的,是改excel还是xml?改了以后另一方是不是也要跟着改动?

解决方案 »

  1.   

    Excel绑定xml,然后在winForm2005中用代码传值给xml数据源,即刷新xml数据源,再以webBrowser显示 ======================================================>>>
    相当于 XML 写入Excel 同时 XML 用webBrowser显示??XML换数据表不行?
    不能有代替方案啊?
      

  2.   

    无效索引?
    VB的引用下标是从1开始的,C#是0开始。
      

  3.   

    而Excel里的所有对象的索引也都是从1开始的,这点就算是在C#里也一样。
      

  4.   

    楼主是把excel文件存成xml文件还是指定一个用Excel做的文件作为模板,然后绑定xml作为数据源显示?
      

  5.   

    还没有解决?
    我刚才试了一下
    不过不是用你的思路
    还是我以前提过的
    完全以xml方式操作excel
    第一步先建一个excel模板文件(以xml格式另存为test.xml)
    <?xml version="1.0"?>
    <?mso-application progid="Excel.Sheet"?>
    <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">
     <DocumentProperties xmlns="urn:schemas-microsoft-com:office:office">
      <Created>1996-12-17T01:32:42Z</Created>
      <LastSaved>2007-04-11T01:31:33Z</LastSaved>
      <Version>11.6568</Version>
     </DocumentProperties>
     <OfficeDocumentSettings xmlns="urn:schemas-microsoft-com:office:office">
      <RemovePersonalInformation/>
     </OfficeDocumentSettings>
     <ExcelWorkbook xmlns="urn:schemas-microsoft-com:office:excel">
      <WindowHeight>4530</WindowHeight>
      <WindowWidth>8505</WindowWidth>
      <WindowTopX>480</WindowTopX>
      <WindowTopY>120</WindowTopY>
      <AcceptLabelsInFormulas/>
      <ProtectStructure>False</ProtectStructure>
      <ProtectWindows>False</ProtectWindows>
     </ExcelWorkbook>
     <Styles>
      <Style ss:ID="Default" ss:Name="Normal">
       <Alignment ss:Vertical="Bottom"/>
       <Borders/>
       <Font ss:FontName="宋体" x:CharSet="134" ss:Size="12"/>
       <Interior/>
       <NumberFormat/>
       <Protection/>
      </Style>
      <Style ss:ID="s22">
       <Alignment ss:Horizontal="Center" ss:Vertical="Bottom"/>
       <Font ss:FontName="宋体" x:CharSet="134" ss:Size="16" ss:Color="#FF0000"/>
      </Style>
      <Style ss:ID="s24">
       <Alignment ss:Vertical="Center"/>
      </Style>
      <Style ss:ID="s26">
       <Alignment ss:Horizontal="Center" ss:Vertical="Center"/>
      </Style>
     </Styles>
     <Worksheet ss:Name="Sheet1">
      <Table ss:ExpandedColumnCount="7" ss:ExpandedRowCount="8" x:FullColumns="1"
       x:FullRows="1" ss:DefaultColumnWidth="54" ss:DefaultRowHeight="14.25">
       <Row ss:AutoFitHeight="0" ss:Span="3"/>
       <Row ss:Index="5" ss:AutoFitHeight="0">
        <Cell ss:Index="3" ss:MergeAcross="4" ss:MergeDown="1" ss:StyleID="s22"><Data
          ss:Type="String">标头</Data></Cell>
       </Row>
       <Row ss:AutoFitHeight="0"/>
       <Row ss:AutoFitHeight="0">
        <Cell ss:Index="3" ss:MergeDown="1" ss:StyleID="s24"><Data ss:Type="String">序号</Data></Cell>
        <Cell ss:MergeAcross="3" ss:StyleID="s26"><Data ss:Type="String">销售额</Data></Cell>
       </Row>
       <Row ss:AutoFitHeight="0">
        <Cell ss:Index="4"><Data ss:Type="String">1月</Data></Cell>
        <Cell><Data ss:Type="String">2月</Data></Cell>
        <Cell><Data ss:Type="String">3月</Data></Cell>
        <Cell><Data ss:Type="String">4月</Data></Cell>
       </Row>
      </Table>
      <WorksheetOptions xmlns="urn:schemas-microsoft-com:office:excel">
       <Unsynced/>
       <Print>
        <ValidPrinterInfo/>
        <PaperSizeIndex>9</PaperSizeIndex>
        <HorizontalResolution>300</HorizontalResolution>
        <VerticalResolution>300</VerticalResolution>
       </Print>
       <Selected/>
       <TopRowVisible>5</TopRowVisible>
       <Panes>
        <Pane>
         <Number>3</Number>
         <ActiveRow>8</ActiveRow>
         <RangeSelection>R9:R11</RangeSelection>
        </Pane>
       </Panes>
       <ProtectObjects>False</ProtectObjects>
       <ProtectScenarios>False</ProtectScenarios>
      </WorksheetOptions>
     </Worksheet>
    </Workbook>
      

  6.   

    然后是完全以xml方式操作它的示例
    另存为一个xls就可以看到效果了
    using System;
    using System.Data;
    using System.Text;
    using System.IO;
    using System.Collections.Generic;
    using System.Xml;public class MyClass
    {
        public static void Main()
        {
            //这是excel中要用到的两个命名空间
            string ssNameSpaceUri = "urn:schemas-microsoft-com:office:spreadsheet";
            string EmptyNameSpaceUri = "urn:schemas-microsoft-com:office:spreadsheet";
            //生成测试用数据集
            DataSet ds = CreateDataSet();
            //取出模板
            XmlDocument xd = new XmlDocument();
            xd.Load("..\\..\\test.xml");
            XmlElement xe = xd.DocumentElement;
            //此xml文档中只有一个table
            //也可以引入namespace,然后用SelectSingleNode方法
            XmlNode table = xe.ChildNodes[4].ChildNodes[0];        //修改表格属性,加入新加的行数
            XmlAttribute xaExpandedRowCount = table.Attributes["ss:ExpandedRowCount"];
            Int32 rowCount = Int32.Parse(xaExpandedRowCount.Value) + ds.Tables[0].Rows.Count;
            xaExpandedRowCount.Value = rowCount.ToString();        foreach (DataRow dr in ds.Tables[0].Rows) {
                //生成每一行
                XmlNode xnRow = xd.CreateElement("Row", EmptyNameSpaceUri);            //加入ss:AutoFitHeight属性
                XmlAttribute xaAutoFitHeight = xd.CreateAttribute("AutoFitHeight", ssNameSpaceUri);
                xaAutoFitHeight.Value = "0";
                xnRow.Attributes.Append(xaAutoFitHeight);
                for (int index = 0; index < ds.Tables[0].Columns.Count; index++) {
                    //为每个数据列生成新的xmlNode
                    XmlNode xnCell = xd.CreateElement("Cell", EmptyNameSpaceUri);
                    //如果是第一列,加入ss:index属性
                    if (index == 0)
                    {
                        XmlAttribute xaIndex = xd.CreateAttribute("Index", ssNameSpaceUri);
                        xaIndex.Value = "3";
                        xnCell.Attributes.Append(xaIndex);
                    }
                    //为每一列生成数据
                    XmlNode xnData = xd.CreateElement("Data", EmptyNameSpaceUri);
                    //这儿都是指定string(文本)
                    XmlAttribute xaType = xd.CreateAttribute("Type", ssNameSpaceUri);
                    xaType.Value = "String";
                    xnData.Attributes.Append(xaType);
                    xnData.InnerText = dr[index].ToString();
                    xnCell.AppendChild(xnData);
                    //加入数据到列
                    xnRow.AppendChild(xnCell);
                }
                
                //新数据行加入完毕
                table.AppendChild(xnRow);
            }
            
            //另存为xls
            using (StreamWriter sw = new StreamWriter("..\\..\\test.xls", false, Encoding.Unicode))
            {
                sw.Write(xd.OuterXml);
                sw.Flush();
                sw.Close();
            }
            
            Console.Read();
        }       static DataSet CreateDataSet()
        {
            DataTable master = new DataTable("product");
            master.Columns.Add(new DataColumn("Index", typeof(int)));
            master.Columns.Add(new DataColumn("Jan", typeof(int)));
            master.Columns.Add(new DataColumn("Feb", typeof(int)));
            master.Columns.Add(new DataColumn("Mar", typeof(int)));
            master.Columns.Add(new DataColumn("Apr", typeof(int)));
           
            for (int i = 0; i < 10; i++)
            {
                DataRow DRmaster = master.NewRow();
                DRmaster[0] = i;
                DRmaster[1] = i;
                DRmaster[2] = i;
                DRmaster[3] = i;
                DRmaster[4] = i;
                master.Rows.Add(DRmaster);
            }
            //返回数据集
            DataSet ds = new DataSet();
            ds.Tables.Add(master);
            
            return ds;    }
    }
      

  7.   

    首先谢谢大家支持,小弟真的很感动.需求是这样的:
    我们的系统要实现的功能是:
    先给客户一个xml(代表数据结构)然后让客户先做好添加xml数据源做一个Excel,
    然后我们的程序打从数据库中取出DataSet,然后从DataSet中传值给xml数据源,也就是说
    给模板去绑定数据源.因为我们的系统到时候是用于innternet上的cs结构,所以用最好用xml,我们好传,如果用表的话,不怎么好,再说用xml的话,对客户来说很方便,不要涉及到
    表,对于他们来说更容易接受
    然后再在WebBrowser中打开显示.现在的问题最主要的是第一步不能解决.查msdn,发现微软确实提供了
    DataBinding, Refresh, ImportXML 等一些方法,可当我去试的时候,发现根本调不出来.
    To:alldj(灵山妖姬) 
    是当我们调用Excel报表时,根据数据库形成xml,然后去刷新报表.To:zhangliu_521(浪客)
    不是 XML 写入Excel 同时 XML 用webBrowser显示因为我们的系统到时候是用于innternet上的cs结构,所以用最好用xml,我们好传,如果用表的话,不怎么好,再说用xml的话,对客户来说很方便,不要涉及到
    表,对于他们来说更容易接受
    如果不能实现,可以考虑用数据表.
    不过数据表我也试过,好像是不能绑定,因为如果用数据表的话,
    好像会把模板一起上的标签数据覆盖,如果可以不覆盖数据的话,您能不能帮我试一下,谢谢了.to:hatita(悠远的风景) :
     问题是我1,0都试了,没通过
    to:dahuzizyd(你就是我心中的女神)先给客户一个xml(代表数据结构)然后让客户先做好添加xml数据源做一个Excel,
    然后我们的程序打从数据库中取出DataSet,然后从DataSet中传值给xml数据源,也就是说
    给模板去绑定数据源to:blackant2(乔峰)
    万分感谢,我先试下您的.
      

  8.   

    是这样的吗?
    http://www.cnblogs.com/dahuzizyd/archive/2007/04/12/Csharp_excel_report_chart_8.html
      

  9.   

    谢谢dahuzizyd(你就是我心中的女神),我试下.