效果如图
网上找了些资料,自己总结并融合了其它一些东西,让输出的xls或者pdf(pdf需要用到 Spire.Xls),批量生成的话最终生成压缩包,大体原理如下
a、自己先自定义一个xls模板,模板如图下图所示,需要注意的是,要在xls设置好自动样式,自动换行等等
b、代码中复制模板到新的文件夹中,
c、根据自定义的text文件中自己写好的列的一些在模板中的位置等信息,内容格式大体如下,在程序中编辑模板
--中文名::datatable名::字段名::位置::是否合并单元格,合并的列数
--V_P_Complaint select * from V_P_Complaint
-- 标题
1.工单号::V_P_Complaint::SZWorkOrderNumber::3,6::0,1
1.投诉来源::V_P_Complaint::ComplaintSource::4,3::0,1
2.受理时间::V_P_Complaint::StartDate::4,6::0,1
d、循环复制编辑模板,把新文件夹打包并生成压缩包输出
API代码
#region 话务工单导出模板文件2:批量导出,最终生成压缩包
/// <summary>
/// 导出Excel
/// </summary>
/// <returns></returns>
[System.Web.Http.HttpGet, System.Web.Http.Route("ModleExcelListExport")]
public HttpResponseMessage ModleExcelListExport(string JobID, int PositionID, int EmployeeID, string DateID)
{
try
{
string baseUrl = AppDomain.CurrentDomain.BaseDirectory,
modelPath = baseUrl + "\\Table\\话务工单模板.xls",//模板文件
BackupsDirPath = "C:\\Table\\" + DateID,//存数据的新文件夹
BackupsPath = BackupsDirPath + "\\" + DateID + "_话务工单.xls";
string rarPatch = "C:\\Table";//压缩包的路径
//创建最终处理好的表册文件夹
if (!Directory.Exists(BackupsDirPath))
Directory.CreateDirectory(BackupsDirPath);
List<string> listJoibID = JobID.Split(',').ToList();
string Name = "";
foreach (var ID in listJoibID)
{
//数据库获取数据
var Dt = Flu.StoredProcedure("Job_Complaint_ExcelSql")
.Parameter("JobID", ID)
.QuerySingle<System.Data.DataTable>();
if (Dt == null || Dt.Rows.Count <= 0)
{
Common.DoLog(ControllerCode, "ModleExcelExport", EmployeeID, "根据模板导出Excel失败,失败原因:未找到有效数据", DateTime.Now);
//return new HttpResponseMessage();
continue;
}
else
{
//自定义输出文件的名字
if (!string.IsNul