说说你要实现的目的,是改excel还是xml?改了以后另一方是不是也要跟着改动?
解决方案 »
- WPF拼图游戏三大疑问,跪求高手进来为小弟解答
- WCF双工,实现简单的聊天程序,开他娘的源!!(依稀记得LinqToAccess开他娘的源)
- 求一DiscuzNT的源码
- contextMenuStrip显示位置定义的问题
- 如何解决不得不生成控件事件的问题
- 验证码局部刷新没反应?在线等答案
- [交流]有多少人还记得ConsoleApplication如何写..
- 【c#求助】如何用命令行启动程序并要求执行操作~~??
- datagridview修改单元格类型
- 关于Graphics上面画的图像转换成bitmap的问题。在线100分。解决就给。
- 在vs2003中,如何用c#把html代码转化为xhtml,请指教。
- 在C#中怎么做一个高速的端口扫描器?
相当于 XML 写入Excel 同时 XML 用webBrowser显示??XML换数据表不行?
不能有代替方案啊?
VB的引用下标是从1开始的,C#是0开始。
我刚才试了一下
不过不是用你的思路
还是我以前提过的
完全以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>
另存为一个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; }
}
我们的系统要实现的功能是:
先给客户一个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(乔峰)
万分感谢,我先试下您的.
http://www.cnblogs.com/dahuzizyd/archive/2007/04/12/Csharp_excel_report_chart_8.html