动态解析XML生成EXCEL
2013-01-28 20:50
309 查看
在做项目中,可能会遇到这样的需求,根据数据库里的数据生成相应格式Excel表格。生成的Excel表格不是常规的表格,而是存在合并,宽度不一,长短不一这种需求的。
类似于下面的图表:
View Code
这个代码只是一种思想,根据XML生成相应的EXCEL关键是设计结构。至于解析数据,学过编程的都会。
本人是菜鸟,编码水平,写作水平有限,欢迎批评指点,谢谢,欢迎交流QQ343548233
类似于下面的图表:
View Code
//要转换的XML文件 creatXML(); string XMLFileName = Path.Combine(Request.PhysicalApplicationPath, "XML\\document.xml"); DataSet dsBook = new DataSet(); dsBook.ReadXml(XMLFileName); int rows = dsBook.Tables[0].Rows.Count + 1; int cols = 7; //将要生成的Excel文件 string ExcelFileName = Path.Combine(Request.PhysicalApplicationPath, "XML\\DMSExcel.xls"); if (File.Exists(ExcelFileName)) { File.Delete(ExcelFileName); } StreamWriter writer = new StreamWriter(ExcelFileName, false); writer.WriteLine("<?xml version=\"1.0\"?>"); writer.WriteLine("<?mso-application progid=\"Excel.Sheet\"?>"); writer.WriteLine("<Workbook xmlns=\"urn:schemas-microsoft-com:office:spreadsheet\""); writer.WriteLine(" xmlns:o=\"urn:schemas-microsoft-com:office:office\""); writer.WriteLine(" xmlns:x=\"urn:schemas-microsoft-com:office:excel\""); writer.WriteLine(" xmlns:ss=\"urn:schemas-microsoft-com:office:spreadsheet\""); writer.WriteLine(" xmlns:html=\"http://www.w3.org/TR/REC-html40/\">"); writer.WriteLine(" <DocumentProperties xmlns=\"urn:schemas-microsoft-com:office:office\">"); writer.WriteLine(" <Author>Automated Report Generator Example</Author>"); writer.WriteLine(string.Format(" <Created>{0}T{1}Z</Created>", DateTime.Now.ToString("yyyy-mm-dd"), DateTime.Now.ToString("HH:MM:SS"))); writer.WriteLine(" <Company>Your Company Here</Company>"); writer.WriteLine(" <Version>11.6408</Version>"); writer.WriteLine(" </DocumentProperties>"); writer.WriteLine(" <ExcelWorkbook xmlns=\"urn:schemas-microsoft-com:office:excel\">"); writer.WriteLine(" <WindowHeight>8955</WindowHeight>"); writer.WriteLine(" <WindowWidth>11355</WindowWidth>"); writer.WriteLine(" <WindowTopX>480</WindowTopX>"); writer.WriteLine(" <WindowTopY>15</WindowTopY>"); writer.WriteLine(" <ProtectStructure>False</ProtectStructure>"); writer.WriteLine(" <ProtectWindows>False</ProtectWindows>"); writer.WriteLine(" </ExcelWorkbook>"); writer.WriteLine(" <Styles>"); writer.WriteLine(" <Style ss:ID=\"Default\" ss:Name=\"Normal\">"); writer.WriteLine(" <Alignment ss:Vertical=\"Bottom\"/>"); writer.WriteLine(" <Borders/>"); writer.WriteLine(" <Font/>"); writer.WriteLine(" <Interior/>"); writer.WriteLine(" <Protection/>"); writer.WriteLine(" </Style>"); writer.WriteLine(" <Style ss:ID=\"s21\">"); writer.WriteLine(" <Alignment ss:Horizontal=\"Center\" ss:Vertical=\"Center\" ss:WrapText=\"1\"/>"); writer.WriteLine(" <Interior ss:Pattern=\"Solid\"/>"); writer.WriteLine(" <Borders>"); writer.WriteLine(" <Border ss:Position=\"Bottom\" ss:LineStyle=\"Continuous\" ss:Color=\"#0000FF\" ss:Weight=\"1\"/>"); writer.WriteLine(" <Border ss:Position=\"Left\" ss:LineStyle=\"Continuous\" ss:Color=\"#0000FF\" ss:Weight=\"1\"/>"); writer.WriteLine(" <Border ss:Position=\"Right\" ss:LineStyle=\"Continuous\" ss:Color=\"#0000FF\" ss:Weight=\"1\"/>"); writer.WriteLine(" <Border ss:Position=\"Top\" ss:LineStyle=\"Continuous\" ss:Color=\"#0000FF\" ss:Weight=\"1\"/>"); writer.WriteLine(" </Borders>"); writer.WriteLine(" </Style>"); writer.WriteLine(" <Style ss:ID=\"header\">"); writer.WriteLine(" <Alignment ss:Horizontal=\"Center\" ss:Vertical=\"Center\" ss:WrapText=\"1\"/>"); writer.WriteLine(" <Interior ss:Color=\"#00FFFF\" ss:Pattern=\"Solid\"/>"); writer.WriteLine(" <Borders>"); writer.WriteLine(" <Border ss:Position=\"Bottom\" ss:LineStyle=\"Continuous\" ss:Color=\"#0000FF\" ss:Weight=\"1\"/>"); writer.WriteLine(" <Border ss:Position=\"Left\" ss:LineStyle=\"Continuous\" ss:Color=\"#0000FF\" ss:Weight=\"1\"/>"); writer.WriteLine(" <Border ss:Position=\"Right\" ss:LineStyle=\"Continuous\" ss:Color=\"#0000FF\" ss:Weight=\"1\"/>"); writer.WriteLine(" <Border ss:Position=\"Top\" ss:LineStyle=\"Continuous\" ss:Color=\"#0000FF\" ss:Weight=\"1\"/>"); writer.WriteLine(" </Borders>"); writer.WriteLine(" </Style>"); writer.WriteLine(" </Styles>"); writer.WriteLine(" <Worksheet ss:Name=\"MyReport\">"); writer.WriteLine(string.Format(" <Table ss:ExpandedColumnCount=\"9\" ss:ExpandedRowCount=\"{0}\" x:FullColumns=\"1\"",rows.ToString())); writer.WriteLine(" x:FullRows=\"1\">"); //生成标题 writer.WriteLine("<Column ss:Index=\"1\" ss:Width=\"147.00\"/>"); writer.WriteLine("<Column ss:Index=\"2\" ss:Width=\"72.00\"/>"); writer.WriteLine("<Column ss:Index=\"3\" ss:Width=\"42.89\"/>"); writer.WriteLine("<Column ss:Index=\"4\" ss:Width=\"42.89\"/>"); writer.WriteLine("<Column ss:Index=\"5\" ss:Width=\"42.89\"/>"); writer.WriteLine("<Column ss:Index=\"6\" ss:Width=\"48.25\"/>"); writer.WriteLine("<Column ss:Index=\"7\" ss:Width=\"21.44\"/>"); writer.WriteLine("<Column ss:Index=\"8\" ss:Width=\"21.44\"/>"); writer.WriteLine("<Column ss:Index=\"9\" ss:Width=\"21.44\"/>"); writer.WriteLine("<Row ss:Height=\"141.00\">"); string[] strDocumentTitle=new string[9]; int i = 0; foreach (DataColumn eachCloumn in dsBook.Tables[0].Columns) { string strTemp = eachCloumn.ColumnName.ToString(); strDocumentTitle[i] = strTemp; i++; } writer.Write("<Cell ss:StyleID=\"header\"><Data ss:Type=\"String\">"); writer.Write(strDocumentTitle[0]); writer.WriteLine("</Data></Cell>"); writer.Write("<Cell ss:StyleID=\"header\"><Data ss:Type=\"String\">"); writer.Write(strDocumentTitle[1]); writer.WriteLine("</Data></Cell>"); writer.Write("<Cell ss:StyleID=\"header\" ss:MergeAcross=\"2\"><Data ss:Type=\"String\">"); writer.Write(strDocumentTitle[2]); writer.WriteLine("</Data></Cell>"); writer.Write("<Cell ss:StyleID=\"header\"><Data ss:Type=\"String\">"); writer.Write(strDocumentTitle[5]); writer.WriteLine("</Data></Cell>"); writer.Write("<Cell ss:StyleID=\"header\"><Data ss:Type=\"String\">"); writer.Write(strDocumentTitle[6]); writer.WriteLine("</Data></Cell>"); writer.Write("<Cell ss:StyleID=\"header\"><Data ss:Type=\"String\">"); writer.Write(strDocumentTitle[7]); writer.WriteLine("</Data></Cell>"); writer.Write("<Cell ss:StyleID=\"header\"><Data ss:Type=\"String\">"); writer.Write(strDocumentTitle[8]); writer.WriteLine("</Data></Cell>"); writer.WriteLine("</Row>"); //生成数据记录 foreach (DataRow eachRow in dsBook.Tables[0].Rows) { writer.WriteLine("<Row ss:Height=\"24.00\">"); for (int currentRow = 0; currentRow != 9; currentRow++) { writer.Write("<Cell ss:StyleID=\"s21\"><Data ss:Type=\"String\">"); writer.Write(eachRow[currentRow].ToString()); writer.WriteLine("</Data></Cell>"); } writer.WriteLine("</Row>"); } writer.WriteLine(" </Table>"); writer.WriteLine(" <WorksheetOptions xmlns=\"urn:schemas-microsoft-com:office:excel\">"); writer.WriteLine(" <Selected/>"); writer.WriteLine(" <Panes>"); writer.WriteLine(" <Pane>"); writer.WriteLine(" <Number>3</Number>"); writer.WriteLine(" <ActiveRow>1</ActiveRow>"); writer.WriteLine(" </Pane>"); writer.WriteLine(" </Panes>"); writer.WriteLine(" <ProtectObjects>False</ProtectObjects>"); writer.WriteLine(" <ProtectScenarios>False</ProtectScenarios>"); writer.WriteLine(" </WorksheetOptions>"); writer.WriteLine(" </Worksheet>"); writer.WriteLine(" <Worksheet ss:Name=\"Sheet2\">"); writer.WriteLine(" <WorksheetOptions xmlns=\"urn:schemas-microsoft-com:office:excel\">"); writer.WriteLine(" <ProtectObjects>False</ProtectObjects>"); writer.WriteLine(" <ProtectScenarios>False</ProtectScenarios>"); writer.WriteLine(" </WorksheetOptions>"); writer.WriteLine(" </Worksheet>"); writer.WriteLine(" <Worksheet ss:Name=\"Sheet3\">"); writer.WriteLine(" <WorksheetOptions xmlns=\"urn:schemas-microsoft-com:office:excel\">"); writer.WriteLine(" <ProtectObjects>False</ProtectObjects>"); writer.WriteLine(" <ProtectScenarios>False</ProtectScenarios>"); writer.WriteLine(" </WorksheetOptions>"); writer.WriteLine(" </Worksheet>"); writer.WriteLine("</Workbook>"); writer.Close();
这个代码只是一种思想,根据XML生成相应的EXCEL关键是设计结构。至于解析数据,学过编程的都会。
本人是菜鸟,编码水平,写作水平有限,欢迎批评指点,谢谢,欢迎交流QQ343548233
相关文章推荐
- 动态解析XML生成EXCEL
- jdom解析xml,生成Excel模板
- [未解决]Ajax-读取并解析XML,动态生成select下拉列表框
- 使用POI和dom4j来解析Excel生成Xml
- java中利用Dom4j解析和生成XML文档
- box2d 描点工具生成b2Shape数据(xml通用格式),oc、c++解析模块类文件,b2Shape数据可视化工具
- 实例教程四:采用Pull解析器解析和生成XML内容
- pull解析和生成xml
- jquery 解析json数据 并动态生成li数据
- Java之dom4j的简单解析和生成xml的应用
- dom4j解析和生成XML文件
- php 数组生成xml、xml解析成数组 xml类
- php动态生成Mysql数据库字典,并一键导出excel代码
- XML的解析和生成(dom4j)
- 解析xml,并通过xml生成pdf文档
- java 利用Xstream注解生成和解析xml
- python菜鸟升级路--自动化解析生成xml文件
- jxl生成和解析Excel
- (转)Android XML解析与生成
- 使用dom4j来解析,生成xml文件