步骤:
一、前台JS取HtmlTable数据,根据设定的分隔符把数据拼接起来
<!--导出Excel--> <script type="text/javascript"> //导出Excel function exportExcel() { var data = ""; $("#divRptTable").find("table").find("tr").each( () { var tr = $(this); tr.find("td").each( () { var td = $(); var rowspan = td.attr("rowspan") ? td.attr("rowspan") : 1; var colspan = td.attr("colspan") ? td.attr("colspan") : 1; data = data + td.text() + "#{valueSeparater}" + rowspan + "#{valueSeparater}" + colspan + "#{columnSeparater}"; }); data = data + "#{rowSeparater}"; }); $("#hidTableData").val(data); var year = $("select[name='year']").find("option[value='" + $("select[name='year']").val() + "']").text(); var sem = $("select[name='sem']").find("option[value='" + $("select[name='sem']").val() + "']"var scl = $("select[name='school']").find("option[value='" + $("select[name='school']").val() + "']"var grade = $("select[name='grade']").find("option[value='" + $("select[name='grade']").val() + "']"var exam = $("select[name='exam']").find("option[value='" + $("select[name='exam']").val() + "']").text(); $("#hidTitle").val(scl + " " + grade + " " + year + " " + sem + " " + exam); $("#frm").submit(); } </script>
二、后台先把前台传过来的字符串转换成HtmlTable实体,然后再转换成DataTable实体
using System; System.Collections.Generic; System.Text; System.Data; System.Web.UI.HtmlControls; 2014年4月2日 namespace QuaEdu.Controller.Core.Utils { /// <summary> /// HtmlTable工具类 提供字符串转换成HtmlTable,HtmlTable转换成DataTable </summary> public class HtmlTableutil { #region 变量 <summary> 行分隔 </summary> static readonly string rowSeparater = "|||||"; 列分隔 string columnSeparater = @@@@@ 值分隔 string valueSeparater = $$$$$ 空值标识 string nullFlag = HtmlTableutil_NULL_FLAG; #endregion #region 字符串转换成HtmlTable 字符串转换成HtmlTable static HtmlTable String2HtmlTable(string data) { HtmlTable htmlTable = new HtmlTable(); string[] rowArray = data.Split(new [] { rowSeparater },StringSplitOptions.RemoveEmptyEntries); foreach (string row in rowArray)遍历行 { HtmlTableRow htmlTableRow = HtmlTableRow(); string[] colArray = row.Split([] { columnSeparater },StringSplitOptions.RemoveEmptyEntries); string col in colArray)遍历列 { HtmlTableCell htmlTableCell = HtmlTableCell(); string[] valArr = col.Split([] { valueSeparater },StringSplitOptions.None); string val = valArr[0]; int rowspan = int.Parse(valArr[1]); int colspan = 2]); htmlTableCell.InnerText = val; htmlTableCell.RowSpan = rowspan; htmlTableCell.ColSpan = colspan; htmlTableRow.Cells.Add(htmlTableCell); } htmlTable.Rows.Add(htmlTableRow); } return htmlTable; } #region HtmlTable转换成DataTable HtmlTable转换成DataTable static DataTable HtmlTable2DataTable(HtmlTable htmlTable) { DataTable dataTable = DataTable(); #region DataTable列数 int colCount = ; if (htmlTable.Rows.Count > ) { foreach (HtmlTableCell htmlTableCell in htmlTable.Rows[].Cells) { colCount += htmlTableCell.ColSpan; } } #endregion #region DataTable行数 int rowCount = htmlTable.Rows.Count; #region 给DataTable添加列 for (int i = 0; i < colCount; i++) { dataTable.Columns.Add(); } #region 给DataTable添加行 0; i < rowCount; i++) { DaTarow daTarow = dataTable.NewRow(); int j = 0; j < colCount; j++) { daTarow[j] = null; } dataTable.Rows.Add(daTarow); } #region 转换 0; i < htmlTable.Rows.Count; i++)遍历HtmlTable行 { HtmlTableRow htmlTableRow = htmlTable.Rows[i]; int delta = 0;列增量 0; j < htmlTableRow.Cells.Count; j++)遍历HtmlTable列 { HtmlTableCell htmlTableCell = htmlTableRow.Cells[j]; #region 计算delta int k = j + delta; k < colCount; k++) { string cellValue = dataTable.Rows[i][k].ToString(); if (cellValue != ) { if (cellValue.IndexOf(nullFlag) == ) { delta++; continue; } } break; } #endregion #region 填充DataTable dataTable.Rows[i][j + delta] = htmlTableCell.InnerText + valueSeparater + htmlTableCell.RowSpan + valueSeparater + htmlTableCell.ColSpan; if (htmlTableCell.RowSpan > 1 || htmlTableCell.ColSpan > int m = 0; m < htmlTableCell.RowSpan; m++int n = 0; n < htmlTableCell.ColSpan; n++) { if (!(m == 0 && n == )) { int ii = i + m; int jj = j + delta + n; dataTable.Rows[ii][jj] = nullFlag + valueSeparater + 1" + valueSeparater + ; } } } } #endregion } } dataTable; } } }
三、将DataTable导出到Excel
NPOI.hssf.usermodel; System.IO; NPOI.SS.usermodel; QuaEdu.Helper; Excel工具类 利用NPOI生成Excel ExcelUtil { #region 生成Excel 生成Excel DataTable必须使用HtmlTableutil.HtmlTable2DataTable生成 void CreateExcel(DataTable dataTable, path) { hssfWorkbook workbook = hssfWorkbook(); ISheet sheet = string.IsNullOrEmpty(dataTable.TableName) ? workbook.CreateSheet(Sheet1") : workbook.CreateSheet(dataTable.TableName);创建工作表 #region 标题 if (!.IsNullOrEmpty(dataTable.TableName)) { dataTable.Rows.InsertAt(dataTable.NewRow(),if (dataTable.Columns.Count > ) { dataTable.Rows[0][0] = dataTable.TableName + HtmlTableutil.valueSeparater + " + HtmlTableutil.valueSeparater + dataTable.Columns.Count; } 1; i < dataTable.Columns.Count; i++0][i] = HtmlTableutil.nullFlag + HtmlTableutil.valueSeparater + " + HtmlTableutil.valueSeparater + ; } } #region 填充数据 0; i < dataTable.Rows.Count; i++)遍历DataTable行 dataTable.Rows[i]; IRow row = sheet.CreateRow(i);在工作表中添加一行 row.HeightInPoints = 20; 0; j < dataTable.Columns.Count; j++)遍历DataTable列 { daTarow[j].ToString(); ICell cell = row.CreateCell(j);在行中添加一列 ICellStyle cellStyle = workbook.CreateCellStyle(); cellStyle.BorderBottom = BorderStyle.Thin; cellStyle.BorderLeft = BorderStyle.Thin; cellStyle.BorderRight = BorderStyle.Thin; cellStyle.BorderTop = BorderStyle.Thin; cellStyle.VerticalAlignment = VerticalAlignment.Top; cell.CellStyle = cellStyle; string[] valArr = cellValue.Split([] { HtmlTableutil.valueSeparater },1)">if (valArr[0] != HtmlTableutil.nullFlag) { double d; if (double.TryParse(valArr[0],1)">out d)) { cell.SetCellType(CellType.Numeric); cell.SetCellValue(d);设置列的内容 } else { cell.SetCellValue(valArr[0]);设置列的内容 if (i != 0) cellStyle.Alignment = HorizontalAlignment.Center; } int unitWidth = 400; int oldWidth = sheet.GetColumnWidth(j); int width = (int)Math.Round(CommonHelper.GetWidthUnitCount(valArr[0])) * unitWidth; width = width > unitWidth * 30 ? unitWidth * 30 : width; width = width < unitWidth * 2 ? unitWidth * : width; if (width > oldWidth) { sheet.SetColumnWidth(j,width); } } } } } #region 合并单元格 dataTable.Rows[i]; daTarow[j].ToString(); int rowSpan = int colSpan = if (rowSpan > 1 || colSpan > ) { sheet.AddMergedRegion(new NPOI.SS.Util.CellRangeAddress(i,i + rowSpan - 1,j,j + colSpan - )); } } } #region 输出到Excel MemoryStream ms = MemoryStream(); workbook.Write(ms); using (FileStream fs = FileStream(path,FileMode.Create,FileAccess.Write)) { byte[] bArr = ms.ToArray(); fs.Write(bArr,1)">,bArr.Length); fs.Flush(); } } } }
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。