BOS运行时 - 引出 - Excel合并单元格

excel支持合并单元格效果,比如存在2个列头,可以合并列或者合并行,如果引出excel想要实现类似效果,可以使用第三方NPOI引出,实现效果如下:

设置参考代码:
//设置合并行列 CellRangeAddress region1 = new CellRangeAddress(0, 1,0, 0); sheet.AddMergedRegion(region1);
完整示例代码如下:
using Kingdee.BOS;
using Kingdee.BOS.App.Data;
using Kingdee.BOS.Core;
using Kingdee.BOS.Core.Bill;
using Kingdee.BOS.Core.Bill.PlugIn;
using Kingdee.BOS.Core.DynamicForm;
using Kingdee.BOS.Core.DynamicForm.PlugIn.Args;
using Kingdee.BOS.Core.DynamicForm.PlugIn.ControlModel;
using Kingdee.BOS.Core.Metadata;
using Kingdee.BOS.Core.Metadata.ControlElement;
using Kingdee.BOS.Core.Metadata.FieldElement;
using Kingdee.BOS.Core.Metadata.FormElement;
using Kingdee.BOS.Excel;
using Kingdee.BOS.Log;
using Kingdee.BOS.Orm.DataEntity;
using Kingdee.BOS.Resource;
using Kingdee.BOS.ServiceHelper;
using Kingdee.BOS.ServiceHelper.Excel;
using Kingdee.BOS.ServiceHelper.FileServer;
using Kingdee.BOS.Util;
using Kingdee.BOS.Web;
using Kingdee.BOS.WebApi.Client;
using Kingdee.BOS.WebApi.FormService;
using NPOI.HSSF.Util;
using NPOI.OpenXmlFormats.Spreadsheet;
using NPOI.SS.Formula.Functions;
using NPOI.SS.UserModel;
using NPOI.SS.Util;
using NPOI.XSSF.Streaming;
using NPOI.XSSF.UserModel;
using System;
using System.Collections.Generic;
using System.Data;
using System.IO;
using System.Linq;
using System.Net.Http;
using System.Text;
using System.Threading.Tasks;
namespace Cloud.BOS.Support.Bill
{
[HotUpdate]
public class NpoiExportPlugin : AbstractBillPlugIn
{
public override void BarItemClick(BarItemClickEventArgs e)
{
if (e.BarItemKey.EqualsIgnoreCase("tbExportByNpoiMerge"))
{
ExportMerge();
}
}
private void ExportMerge()
{
var tb = BuildMergeData();
var showParameter = new DynamicFormShowParameter();
showParameter.FormId = "BOS_FileDownLoad";
showParameter.OpenStyle.ShowType = ShowType.Modal;
showParameter.CustomParams.Add("url", NPOIMerge(tb));
this.View.ShowForm(showParameter);
}
private string NPOIMerge(DataTable tb)
{
var wb = new SXSSFWorkbook();
SXSSFSheet sheet = (SXSSFSheet)wb.CreateSheet("demo");
var tempXmlFile = sheet._writer.TemporaryFilePath();
string fileName = string.Format("NPOI-demo-{0}.xlsx", DateTime.Now.ToString("yyyyMMddhhmmss"));
var filePath = PathUtils.GetPhysicalPath(KeyConst.TEMPFILEPATH, fileName);
var fileUrl = PathUtils.GetServerPath(KeyConst.TEMPFILEPATH, PathUtils.UrlEncode(fileName));
try
{
for (int i = 0; i < tb.Rows.Count; i++)
{
var dataIndex = i;
IRow row = sheet.CreateRow(dataIndex);
for (int colIndex = 0; colIndex < tb.Columns.Count; colIndex++)
{
ICell cell = row.CreateCell(colIndex);
ICellStyle textCellStyle = wb.CreateCellStyle();
textCellStyle.DataFormat = wb.CreateDataFormat().GetFormat("@");
cell.SetCellValue(tb.Rows[dataIndex][colIndex].ToString());
cell.CellStyle = textCellStyle;
}
}
var cell1 = sheet.GetRow(0).GetCell(0);
//设置合并行列
CellRangeAddress region1 = new CellRangeAddress(0, 1,0, 0);
sheet.AddMergedRegion(region1);
SetCenter(wb, cell1);
CellRangeAddress region2 = new CellRangeAddress(0, 1, 1, 1);
sheet.AddMergedRegion(region2);
SetCenter(wb, cell1);
CellRangeAddress region3 = new CellRangeAddress(0, 1, 2, 2);
sheet.AddM
BOS运行时 - 引出 - Excel合并单元格
声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。如若本站内容侵犯了原著者的合法权益,可联系本站删除。



