导出列表信息至Excel

导出列表信息,可通过使用模板导出,也可直接导出。

一、直接导出列表信息

 /// <summary>
        /// 导出excel文件
        /// </summary>
        /// <param name="reportTitle">标题</param>
        /// <param name="dt">数据源</param>
        /// <param name="columns">列名</param>
        /// <param name="filePath">文件路径</param>
        /// <param name="maxRow">一页显示最大记录数</param>
        public static void Export(string reportTitle, List<string> subTitles, DataTable dt, Dictionary<string, string> columns, string filePath, int maxRow)
        {
            int WorkSheetCount = Convert.ToInt32(Math.Ceiling(dt.Rows.Count * 1.0 / maxRow));
            XlsDocument doc = new XlsDocument();
            for (int i = 0; i < WorkSheetCount; i++)
            {
                Worksheet sheet = doc.Workbook.Worksheets.Add(string.Format("Sheet{0}", i + 1));
                int rowIndex = 0;
                int colIndex = 0;
                int currentMinRowIndex = i * maxRow;
                int currentMaxRowIndex = 0;
                if (((i + 1) * maxRow + 1) < dt.Rows.Count)
                    currentMaxRowIndex = (i + 1) * maxRow;
                else
                    currentMaxRowIndex = dt.Rows.Count;
                //标题
                if (!string.IsNullOrEmpty(reportTitle))
                {
                    rowIndex++;
                    XF cellXF = doc.NewXF();
                    cellXF.VerticalAlignment = VerticalAlignments.Centered;
                    cellXF.HorizontalAlignment = HorizontalAlignments.Centered;
                    cellXF.Font.Height = 24 * 12;
                    cellXF.Font.Bold = true;
                    sheet.Cells.Add(rowIndex, 1, reportTitle, cellXF);
                    MergeArea area = new MergeArea(rowIndex, rowIndex, 1, columns.Count);
                    sheet.AddMergeArea(area);
                }
                //副本标题
                if (subTitles != null && subTitles.Count > 0)
                {
                    foreach (string sub in subTitles)
                    {
                        rowIndex++;
                        sheet.Cells.Add(rowIndex, 1, sub);
                        MergeArea area = new MergeArea(rowIndex, rowIndex, 1, columns.Count);
                        sheet.AddMergeArea(area);
                    }
                }

                //列头标题
                rowIndex++;
                foreach (string colTitle in columns.Values)
                {
                    colIndex++;

                    XF cellXF = doc.NewXF();
                    cellXF.VerticalAlignment = VerticalAlignments.Centered;
                    cellXF.HorizontalAlignment = HorizontalAlignments.Centered;
                    cellXF.Font.Bold = true;
                    cellXF.TopLineColor = Colors.Black;
                    cellXF.TopLineStyle = 1;
                    cellXF.BottomLineColor = Colors.Black;
                    cellXF.BottomLineStyle = 1;
                    cellXF.LeftLineColor = Colors.Black;
                    cellXF.LeftLineStyle = 1;
                    cellXF.RightLineColor = Colors.Black;
                    cellXF.RightLineStyle = 1;

                    sheet.Cells.Add(rowIndex, colIndex, colTitle, cellXF);

                }

                //数据行
                for (int j = currentMinRowIndex; j < currentMaxRowIndex; j++)
                {
                    rowIndex++;
                    colIndex = 0;

                    XF cellXF = doc.NewXF();
                    cellXF.TopLineColor = Colors.Black;
                    cellXF.TopLineStyle = 1;
                    cellXF.BottomLineColor = Colors.Black;
                    cellXF.BottomLineStyle = 1;
                    cellXF.LeftLineColor = Colors.Black;
                    cellXF.LeftLineStyle = 1;
                    cellXF.RightLineColor = Colors.Black;
                    cellXF.RightLineStyle = 1;

                    foreach (string colName in columns.Keys)
                    {
                        colIndex++;
                        sheet.Cells.Add(rowIndex, colIndex, dt.Rows[j][colName] == null || dt.Rows[j][colName] == DBNull.Value ? "" : dt.Rows[j][colName].ToString(), cellXF);
                    }
                }

            }
            doc.FileName = System.Web.HttpContext.Current.Server.UrlEncode(reportTitle) + ".xls";
            if (!string.IsNullOrEmpty(filePath))
            {
                doc.Save(filePath);
            }
            else
            {
                //把文件直接写到客户端
                doc.Send();
        System.Web.HttpContext.Current.Response.Flush();
                System.Web.HttpContext.Current.Response.End();
            }
        }

测试用例:

 private void Execel(DataTable dt)
        {
            //添加列
            dt.Columns.Add(new DataColumn("C_TEST_E_NEW"));
            if (dt.Rows.Count > 0 && dt != null)
            {
                //数据转换
                foreach (DataRow dr in dt.Rows)
                {
                    dr["C_TEST_E_NEW"] = GetMap( dr["C_TEST_E"]);
                }

                var cols = new Dictionary<string, string>();
                cols.Add("C_TEST_A", "测试A");
                cols.Add("C_TEST_B, "测试B");
                cols.Add("C_TEST_C", "测试C");
                cols.Add("C_TEST_D", "测试D");
		cols.Add("C_TEST_E", "测试E");

                var subTitle = new List<string>();
                subTitle.Add("导出时间:" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
                ExcelHelper.Export("ExportTitle", subTitle, dt, cols);
            }

二、使用模板导出

public HSSFCell GetCell(HSSFRow row, HSSFCellStyle cellStyle, int colIdx)
        {
            HSSFCell cell = row.GetCell(colIdx) as HSSFCell;
            if (cell == null)
            {
                cell = row.CreateCell(colIdx) as HSSFCell;
                cell.CellStyle = cellStyle;
            }
            return cell;
        }

        public void ExportExcel(bool flag)
        {
            DataTable dt = GetTable(true);
            using (FileStream file = new FileStream(Server.MapPath("~/Test/ExportTest.xls"), FileMode.Open, FileAccess.Read))
            {
                HSSFWorkbook hssfworkbook = new HSSFWorkbook(file);
                HSSFSheet sheet1 = hssfworkbook.GetSheet("Sheet1") as HSSFSheet;
                HSSFCellStyle sheetStyle = hssfworkbook.CreateCellStyle() as HSSFCellStyle;
                sheetStyle.BorderBottom = NPOI.SS.UserModel.CellBorderType.THIN;
                sheetStyle.BottomBorderColor = 64;
                sheetStyle.BorderLeft = NPOI.SS.UserModel.CellBorderType.THIN;
                sheetStyle.LeftBorderColor = 64;
                sheetStyle.BorderRight = NPOI.SS.UserModel.CellBorderType.THIN;
                sheetStyle.RightBorderColor = 64;
                sheetStyle.BorderTop = NPOI.SS.UserModel.CellBorderType.THIN;
                sheetStyle.TopBorderColor = 64;
                sheetStyle.WrapText = true;
                sheet1.ForceFormulaRecalculation = true;
                for (int i = 0; i < dt.Rows.Count; i++)
                {
                    DataRow row = dt.Rows[i];
                    HSSFRow hssfRow = sheet1.CreateRow(sheet1.LastRowNum + 1) as HSSFRow;

                    GetCell(hssfRow, sheetStyle, 0).SetCellValue(GetStreetName(row["C_TEST_A"]));
                    GetCell(hssfRow, sheetStyle, 1).SetCellValue(GetValue(row["C_TEST_B"]));
                    GetCell(hssfRow, sheetStyle, 2).SetCellValue(GetReason(row["C_TEST_C"]));
                    GetCell(hssfRow, sheetStyle, 3).SetCellValue(GetValue(row["C_TEST_D"]));
                    GetCell(hssfRow, sheetStyle, 4).SetCellValue(GetValue(row["C_TEST_E"]));
                }
                using (MemoryStream ms = new MemoryStream())
                {
                    hssfworkbook.Write(ms);
                    Response.Charset = "utf-8";
                    Response.ContentEncoding = System.Text.Encoding.GetEncoding("utf-8");
                    Response.AddHeader("Content-Disposition", string.Format("attachment;filename=SiteInfoSearch.xls"));
                    Response.HeaderEncoding = System.Text.Encoding.GetEncoding("GB2312"); //中文标题
                    Response.BinaryWrite(ms.ToArray());
                    Response.End();
                }
            }
        }
时间: 2024-10-29 19:10:35

导出列表信息至Excel的相关文章

ASP.NET列表信息以Excel形式导出

1.从数据查出数据扔进table中: private DataTable getTable() { var dbHelper = applyBLL.CreateDataBase("VISAdoDb"); StringBuilder SB = new StringBuilder(); SB.AppendFormat("Select ApplyForID,Applicants,CardNo from VIS_ApplyFor where iState = 0 and (Apply

PHP导出MySQL数据到Excel文件

PHP导出MySQL数据到Excel文件 转载 常会碰到需要从数据库中导出数据到Excel文件,用一些开源的类库,比如PHPExcel,确实比较容易实现,但对大量数据的支持很不好,很容易到达PHP内存使用上限.这里的方法是利用fputcsv写CSV文件的方法,直接向浏览器输出Excel文件. ? 1 <br><!--?php// 输出Excel文件头,可把user.csv换成你要的文件名header('Content-Type: application/vnd.ms-excel');he

Java 从数据库中查找信息导入Excel表格中

前端js function Excel (){ //ajax请求 $.ajax({ url : "outPutAboutShopInfo", type : "post", dataType : "json", data:{ "basicShop.shopId" : shopId, "basicShop.shopMemo" : stringType //不方便增加字段所以使用门店的一个"备注&quo

Toad使用方法之导出LogMiner信息

Toad 使用方法之导出LogMiner信息 1 选取要导出的文件 Shift 选择 2 选择导出 右击选择Export Dataset 3 将选取的信息输出到文件 3.1 选择输出格式 Export format:Excel Files 3.2 选择输出文件位置 OutputàFile:c:\Users\Jh\Desktop\abc.xls 查看数据设置命令 4 查看文件 4.1指定目录下找到abc.xls文件 信息都已经被录入abc.xls文件中,并且已经按照表格排版 可以稍微调整,提高可读

PHP导入与导出xml格式的Excel

1 简介 1.1 导出 在实际的工作项目中,经常需要将一些重要的数据库中存的数据导出成Excel,比如导出考勤报表,导出财务报表,导出业绩报表,导出销售报表等.CleverCode以前使用了两年的PHPExcel来制作Excel导出数据,但发现用PHPExcel生成Excel实在是太麻烦了,特别是控制单元格的颜色,合并单元格,给单元格设置长度等.这些设计一个Excel通常会需要花费一天的时间.后来CleverCode发现了一个简便的方法PHP导出xml格式的Excel,以前需要一天的工作量,现在

.NET使用Office Open XML导出大量数据到 Excel

我相信很多人在做项目的都碰到过Excel数据导出的需求,我从最开始使用最原始的HTML拼接(将需要导出的数据拼接成TABLE标签)到后来happy的使用开源的NPOI, EPPlus等开源组件导出EXCEL,但不久前,我在一个项目碰到一个需求:要将几个分别有近60多万的数据源导出到Excel中,我们先不要讨论这个需求本身是否合理,客户就是要这样.我先后用NPOI和EPPlus,都发现同一个问题:OutOfMemoryException,我电脑12G内存居然不够用? 的确内存溢出了,但内存还剩下好

[node 工具] 用 Node.js 将 bugzilla 上的 bug 列表导入到 excel 表格在线版本之一(server 端)

之前写了个 用 Node.js 将 bugzilla 上的 bug 列表导入到 excel 表格里 的 cli 工具虽然可以用,但考虑到一下几点,总觉得需要再做点什么. 界面简陋,我那截图上是在 VSCode 下的 git bash 里使用的,看起来倒还好一些.如果是在 CMD 下使用,不忍直视. 需要使用命令的方式启动,URL 地址还需要添加双引号,体验不好. 需要自行安装 nodejs 环境 因此我将这个工具做成了在线的版本,只要复制个 URL,点击开始,傻瓜操作,多人使用. 1 var e

将包含经纬度点位信息的Excel表格数据导入到ArcMap中并输出成shapefile

将包含经纬信息的Excel表格数据,导入到ArcMap中并输出成shapefile,再进行后面的操作.使用这种方法可以将每一个包含经纬信息的数据在ArcMap中点出来. 一.准备数据 新建Excel表格,保存时设置后缀名为.xls(即2003Excel的表格).在表格首行建立各字段名,其中要包含经度和纬度的信息,用于在地图中标定位置.录入各记录属性,整理成表. 二.ArcMap中添加x-y事件 在打开的对话框中选择数据表和x.y对应的经度.纬度.选择坐标系统,这里因为我们的x,y对应的数据是经纬

Android 实现用户列表信息滑动删除功能和选择删除功能

在项目开发过程中,常常需要对用户列表的信息进行删除的操作.Android中常用的删除操作方式有两种 ,一种就是类似微信的滑动出现删除按钮方式,还有一种是通过CheckBox进行选择,然后通过按钮进行删除的方式.本来的实例集成上述的两种操作方式来实现用户列表删除的效果. 设计思路:在适配器类MyAdapter一个滑动删除按钮显示或隐藏的Map,一个用于CheckBox是否选中的Map和一个与MainAcitivyt进行数据交互的接口ContentsDeleteListener,同时该接口包含两个方