动态解析XML生成EXCEL
2013-02-13 14:20
441 查看
在做项目中,可能会遇到这样的需求,根据数据库里的数据生成相应格式Excel表格。生成的Excel表格不是常规的表格,而是存在合并,宽度不一,长短不一这种需求的。
类似于下面的图表:
View Code
View Code
这个代码只是一种思想,根据XML生成相应的EXCEL关键是设计结构。至于解析数据,学过编程的都会。
类似于下面的图表:
View Code
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关键是设计结构。至于解析数据,学过编程的都会。
相关文章推荐
- 动态解析XML生成EXCEL
- jdom解析xml,生成Excel模板
- 使用POI和dom4j来解析Excel生成Xml
- [未解决]Ajax-读取并解析XML,动态生成select下拉列表框
- jquery 解析json数据 并动态生成li数据
- dom4j解析和生成XML文件
- php 数组生成xml、xml解析成数组 xml类
- XML的解析和生成(dom4j)
- 采用Pull解析器解析和生成XML内容.
- Java上传下载excel、解析Excel、生成Excel的问题
- dubbo源码解析(三) dubbo spi 动态生成类
- java解析excel生成sql文件
- 通过excel可识别的xml结构直接生成xls文件
- XML形式的配置文件解析框架以及自动代码生成(一)
- XML结合XSLT生成Excel(导入到多个Worksheet)
- 利用DOM4J生成、解析XML-myElipse8.6
- dom4j生成和解析xml文件
- Java上传下载excel、解析Excel、生成Excel的问题
- 使用JDOM生成和解析XML
- Android接收jsp中动态生成的xml或json数据。