导出带下拉框的Excel(数据超出长度解决方案)

   注意:此文档中标注的行号和列号都是下标,从0开始

//下载模板

  protected void btnDownLoad_ServerClick(object sender,EventArgs e)

  {

     //生成Excel模板

  CreateExcelTemp();

  //设置想要打开的模板路径

   string path = this.MapPath("~/BaseInfo/Temp/GABProdectInfoMaintain.xls");

   //将此模板打开或重新保存

  ExcelOutE(this, path);

  }

  /// 生成Excel模板并打开
  /// </summary>
  private void CreateExcelTemp()

  {
            //获取数据库中的产品组信息列表  
            List<ProductGroupModel> ProductGroupInfo = ProductGroupBusiness.GetUserAllProductGroup(CurrentUserCode);

List<string> ProductGroupList = new List<string>();

//将产品信息列表中是产品组名称和编号组合成一列,加入ProductGroupList集合

foreach (ProductGroupModel item in ProductGroupInfo)

{
                   ProductGroupList.Add(item.Name + "(" + item.ProductGroupCode + ")");

}
            //创建Excel模板(在模板上修改)
            //创建模板
            HSSFWorkbook hssfworkbook = new HSSFWorkbook();

ISheet realSheet = hssfworkbook.CreateSheet("realSheet");
            ISheet hidden = hssfworkbook.CreateSheet("hidden");

    设置hssfworkbook中下标为一的sheet隐藏

    hssfworkbook.SetSheetHidden(1, true);

    //循环ProductGroupList集合,将所有数据加入hidden中的第0列

           //注意:在别的sheet中第几列需要引用hidden中的数据,就应该将数据源中的数据插入到hidden中的第几列,列编号必须相同

for (int i = 0; i < ProductGroupList.Count; i++)

{
                HSSFRow rowtemp = (HSSFRow)hidden.CreateRow(i);
                ICell celltemp = rowtemp.CreateCell(0);//将数据库查到到hidden中的第0列
                celltemp.SetCellValue(ProductGroupList[i].ToString());
            }

//设置hidden中的一些属性
            IName namedCell = hssfworkbook.CreateName();
            namedCell.NameName="hidden";
            namedCell.RefersToFormula = "hidden!A1:A" + ProductGroupList.ToArray().Length;

//将hidden中的数据加入到constraint里面

DVConstraint constraint = DVConstraint.CreateFormulaListConstraint("hidden");

CellRangeAddressList addressList = null;
            HSSFDataValidation validation = null;

//给realSheet创建行和列

IRow row0 = realSheet.CreateRow(0);
            row0.CreateCell(0).SetCellValue("GAB其他产品信息维护");
            IRow row1 = realSheet.CreateRow(1);
            row1.CreateCell(0).SetCellValue("产品组");
            row1.CreateCell(1).SetCellValue("产品名称");
            row1.CreateCell(2).SetCellValue("产品价格");

//设置realSheet中列的宽度

realSheet.SetColumnWidth(0, 8000);
            realSheet.SetColumnWidth(1, 5000);
            realSheet.SetColumnWidth(2, 5000);

//填充信息
            DataTable dt = A_GABCustomerRelationBusiness.GetGABProductInfo();
            if (dt != null || dt.Rows.Count > 0)
            {
                for (int i = 0; i < dt.Rows.Count; i++)
                {

//在realSheet的第2行第0列开始引用hidden中的数据
                    addressList = new CellRangeAddressList(i+2, i+2, 0, 0);

validation = new HSSFDataValidation(addressList, constraint);
                    realSheet.AddValidationData(validation);

HSSFRow rowtemp = (HSSFRow)realSheet.CreateRow(i + 2);
                    ICell celltemp = rowtemp.CreateCell(0);
                    celltemp.SetCellValue(dt.Rows[i]["ProductGroupName"].ToString());

ICell celltemp1 = rowtemp.CreateCell(1);
                    celltemp1.SetCellValue(dt.Rows[i]["ProductName"].ToString());

ICell celltemp2 = rowtemp.CreateCell(2);
                    celltemp2.SetCellValue(dt.Rows[i]["ProductPrice"].ToString());
                }
            }
            #endregion

//保存修改的模板
            string savePath = this.MapPath("~/BaseInfo/Temp/GABProdectInfoMaintain.xls");
            using (FileStream file = new FileStream(savePath, FileMode.Create))
            {

//写入文件到savePath路径下
                hssfworkbook.Write(file);

    }

  }

//将fileName文件打开或重新保存

  public static void ExcelOutE(Page Page, string fileName)
  {
            HttpResponse Response = Page.Response;
            HttpServerUtility Server = Page.Server;

string fn = Server.UrlDecode(fileName);
            FileStream fileStream = new FileStream(fn, FileMode.Open);
            long fileSize = fileStream.Length;
            fileStream.Close();
            Response.Clear();
            Response.Buffer = true;
            Response.Charset = "GB2312";
            Response.AppendHeader("Content-Disposition", "attachment;filename=Sheet1.xls");
            Response.ContentEncoding = System.Text.Encoding.GetEncoding("GB2312");
            Response.ContentType = "application/ms-excel";
            Response.AddHeader("Content-Length", fileSize.ToString());
            Page.EnableViewState = false;
            Response.WriteFile(fn);
            Response.Flush();
            Response.End();
  }

导出带下拉框的Excel(数据超出长度解决方案)

时间: 2024-10-14 05:43:42

导出带下拉框的Excel(数据超出长度解决方案)的相关文章

Ajax提高篇(7)Ajax实现简单的下拉框联动显示数据

页面中的两个下拉列表框: <tr> <td style="width: 130px"> 所在学院:</td> <td style="width: 100px"> <select id="college" style="width: 200px" runat="server" onchange="changcollege(this.value)&

Java 使用POI生成带联动下拉框的excel表格

java 小学生一枚 ,学习记录. import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import org.apache.poi.hssf.usermodel

Extjs 下拉框显示远程数据

1 var store = new HT.SyncStore({ 2 baseParams : { 3 itemName : '绩效考核_任务状态' 4 }, 5 url : __ctxPath 6 + '/system/loadItemRecordDictionary.do', 7 reader : new Ext.data.JsonReader({ 8 root : 'data', 9 fields : [ 'itemValue', 'dicId', 'descp' ] 10 }) 11 }

Excel 设置单元格为下拉框,并且设置数据来源

1.选中单元格,设置Data Validation为下拉框: 2 .数据来源代码设置: =OFFSET(DropDownValues!$C$2,0,0,COUNTIF(DropDownValues!$C:$C,">=""")-1,1) // 表示数据来源于"DropDownValues"这个sheet的C列,筛选出不为空的数值作为数据源 原文地址:https://www.cnblogs.com/Aaron-Lee/p/9964777.htm

第二百二十四节,jQuery EasyUI,ComboGrid(数据表格下拉框)组件

jQuery EasyUI,ComboGrid(数据表格下拉框)组件 学习要点: 1.加载方式 2.属性列表 3.方法列表 本节课重点了解 EasyUI 中 ComboGrid(数据表格下拉框)组件的使用方法,这个组件 依赖于 Combo(自定义下拉框)和 DataGrid(数据表格)组件. 一.加载方式 class 加载方式 <select id="box" class="easyui-combogrid" name="dept" sty

.NET MVC中给下拉框填充数据

在MVC 中绑定模型的视图,很多时候都会用到下拉框,所以在此记录一下根据DataTable中的数据给下拉框填充数据的方法 1 /// <summary> 2 /// 将 DataTable 转成下拉框的填充数据List<SelectListItem>类型 3 /// </summary> 4 /// <param name="dt">数据DataTable</param> 5 /// <param name="

layui与jquery冲突导致下拉框无法显示的解决方法

1.背景: 在使用 layui 框架写 jsp 的时候,使用 ajax 传递数据来刷新表单,发现使用 ajax 引用外部的jquery 和 layui 自带的jquery中,可能是 $ 导致select 下拉框中的option 没法在layui中正常使用(即数据传过去了,但是点击下拉框没有任何数据) 2.解决 查了一下网上的解决方法.有个解决方法是 在layui.js之前引用其他jquery .但是发现 并没有什么卵用. 后来发现,ajax传递数据在加载页面之后,导致了导入的option没有在第

自定义SWT控件一之自定义单选下拉框

一.自定义下拉控件 自定义的下拉框,是自定义样式的,其中的下拉框使用的是独立的window,非复选框的下拉框双击单机其它区域或选择完之后,独立window构成的下拉框会自动消失. package com.view.control.select; import java.util.ArrayList; import java.util.List; import org.eclipse.swt.SWT; import org.eclipse.swt.custom.ScrolledComposite;

jQuery动态生成&lt;select&gt;下拉框

前一阵在项目里需要动态生成下拉框,找了一下用jQuery实现比较方便,这里整理一下. 下文所述方法只是本人在项目中遇到问题的解决方法,场景较为简单,也希望能帮助有需要的朋友 1.动态生成下拉框的两种方式 (1)将数据放在model中,JSP页面用EL表达式${}取出,该方式缺点是数据更改时必须刷新整个页面,本文不过多描述. (2)就是本文要说的jQuery动态生成了,该方式适合数据频繁变动的场景. 2.<select>组成 <select> <option value=”aa