K/3Cloud生成及下载Excel文件【分享】
金蝶云社区-云社区用户4u731234
云社区用户4u731234
6人赞赏了该文章 5709次浏览 未经作者许可,禁止转载编辑于2016年05月26日 14:51:52

K/3Cloud中,对于界面上展现的数据,一些情况,我们需要生成Excel文件,并下载到本地的需求,
本帖子提供一个完整的示例代码,
实现K/3Cloud中数据

生成Excel文件到服务端临时目录TempfilePath中,
并下载到本地的功能。

运行效果:
动态表单,界面中有一单据体,加载了3条数据,
点击菜单“ExportExcel”,
生成Excel文件,并弹出下载文件界面。

下载后的Excel打开效果:
导出了单据体中的3条数据

动态表单的绑定插件代码:
[code]using Kingdee.BOS.Core;
using Kingdee.BOS.Core.DynamicForm;
using Kingdee.BOS.Core.DynamicForm.PlugIn;
using Kingdee.BOS.Core.DynamicForm.PlugIn.Args;
using Kingdee.BOS.ServiceHelper.Excel;
using Kingdee.BOS.Util;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Linq;
using System.Text;

namespace ClassLibrary.Business.PlugIn
{
[Description("动态表单插件-导出Excel文件")]
public class ExportExcelEdit : AbstractDynamicFormPlugIn
{
public override void AfterBindData(EventArgs e)
{
//base.AfterBindData(e);
//单据体生成3行数据
int iRowCount = 3;
this.Model.BatchCreateNewEntryRow("FEntity", iRowCount);

for (int i = 0; i < iRowCount; i++)
{
this.View.Model.SetValue("F_bos_Text", string.Concat(i, "Data"), i);
}
this.View.UpdateView("FEntity");
}

public override void BarItemClick(BarItemClickEventArgs e)
{
//base.BarItemClick(e);
if (e.BarItemKey == "tbExportExcel")
{
this.ExportExcel();
}
}

private void ExportExcel()
{
var entity = this.View.BusinessInfo.GetEntity("FEntity");
var curRows = this.View.Model.GetEntityDataObject(entity);
if (curRows.Count == 0)
{
this.View.ShowMessage("无可导出数据!");
return;
}

DataSet dataSet = new DataSet();
DataTable dt = dataSet.Tables.Add(this.Model.BusinessInfo.GetForm().Id);
List outFieldKes = new List() { "F_bos_Text" };//需要导出的字段Key标识
Dictionary Fields = new Dictionary();
foreach (var field in entity.Fields)
{
if (outFieldKes.Contains(field.PropertyName))
{
dt.Columns.Add(field.PropertyName);//添加列
Fields.Add(field.PropertyName, field.Name);//
}
}

dt.BeginInit();
DataRow drKey = dt.NewRow();
DataRow drName = dt.NewRow();
foreach (var field in Fields)
{
drKey[field.Key] = field.Key;
drName[field.Key] = field.Value;
}
dt.Rows.Add(drKey);//Add Key行
dt.Rows.Add(drName);//Add Name行

foreach (var item in curRows)//循环需要导出的数据
{
DataRow dr = dt.NewRow();
foreach (var field in Fields)
{
dr[field.Key] = item[field.Key];//赋值
}
dt.Rows.Add(dr);
}
dt.EndInit();

ExcelOperation helper = new ExcelOperation(this.View);
helper.BeginExport();
helper.ExportToFile(dataSet);

string fileName = string.Format("{0}_{1}", this.Model.BusinessInfo.GetForm().Name,
DateTime.Now.ToString("yyyyMMddHHmmssff"));

string[] IllegalStrs = new string[] { "/", "\\" };
foreach (var str in IllegalStrs)
{
fileName = fileName.Replace(str, "");
}

fileName = PathUtils.GetValidFileName(fileName);
string _FilePath = PathUtils.GetPhysicalPath(KeyConst.TEMPFILEPATH, fileName);
string _OutServicePath = PathUtils.GetServerPath(KeyConst.TEMPFILEPATH, fileName);
_FilePath += ".xls";
_OutServicePath += ".xls";
//生成Excel文件
helper.EndExport(_FilePath, SaveFileType.XLS);

//下载文件
DynamicFormShowParameter param = new DynamicFormShowParameter();
param.FormId = "BOS_FileDownLoad";
param.OpenStyle.ShowType = ShowType.Modal;
param.CustomParams.Add("IsExportData", "true");
param.CustomParams.Add("url", _OutServicePath);

this.View.ShowForm(param);
}
}
}
[/code]