WordExcel报表源码.docx
- 文档编号:9028392
- 上传时间:2023-02-02
- 格式:DOCX
- 页数:18
- 大小:19.23KB
WordExcel报表源码.docx
《WordExcel报表源码.docx》由会员分享,可在线阅读,更多相关《WordExcel报表源码.docx(18页珍藏版)》请在冰豆网上搜索。
WordExcel报表源码
WordExcel报表源码
usingSystem;
usingSystem.Collections.Generic;
usingSystem.Text;
usingSystem.Data;
usingSystem.Windows.Forms;
usingSystem.Collections;
usingSystem.IO;
usingSystem.Reflection;
usingSystem.Data.OleDb;
usingSystem.Drawing;
usingAspose.Words;
usingAspose.Cells;
namespaceLqjt
{
///
///报表输出的操作
///
publicclassReportsCorrelation
{
///
///存放报表模板的表名
///
publicstringReportTableName=SpecialTableName.ReportTableName;
///
///EXCEL报表自动完成后,由具体功能进行后续处理的委托函数定义
///
///
///
///
///
///
///
publicdelegatevoidAfterProExcelDef(stringp_ReportTableName,intp_Starty,intp_Startx,intp_Width,Worksheetp_ExcelSheet,DataTablep_Table);
///
///AfterProExcelDef的具体实例
///
publicAfterProExcelDefAfterProExcel=null;
///
///利用Word生成简历式报表
///
///
///
publicvoidMakeDetailReport(DataTablep_Table,stringp_FileName)
{
try
{
//word采用邮件合并,因此,手工添加操作员/今日两个特殊域
DataTabletb=p_Table.Copy();
DataColumncol=newDataColumn("{操作员}",typeof(string));
tb.Columns.Add(col);
col=newDataColumn("{今日}",typeof(string));
tb.Columns.Add(col);
stringstrOp=Lqjt.OpInfo.OpName;
stringstrToday=Tools.DateTimeToStr(Tools.Today);
foreach(DataRowrowintb.Rows)
{
row["{操作员}"]=strOp;
row["{今日}"]=strToday;
}
Documentdoc=newDocument(p_FileName);
doc.MailMerge.Execute(Tools.FormatDataTable(tb));
doc.Save(p_FileName);
System.Diagnostics.Process.Start(p_FileName);
}
catch(Exceptionee)
{
Tools.ShowMessage(ee.Message);
}
}
///
///生成Excel格式的报表
///
///
///
///
///
///
publicvoidMakeListReport(intp_ReportId,stringp_FileName,DataTablep_Table,DataRowp_TitleRow,stringp_ReportTableName)
{
//表中的列
ArrayListarrTableColumns=Tools.GetTableColCaptions(p_Table);
//得到是否自动汇总、非汇总字段、分类汇总字段
boolbAutoSubmit=true;
ArrayListarrNotSubmitFields=newArrayList();
stringstrClassFieldColumn="",strClassSubColumns="";
stringstrSql="select自动汇总标志,非汇总字段,分类汇总分类列,分类汇总统计列from"+ReportTableName+"where序号="+p_ReportId.ToString();
DataRowrowSubmit=Tools.GetValueDataRow(strSql);
if(rowSubmit!
=null)
{
bAutoSubmit=bool.Parse(rowSubmit["自动汇总标志"].ToString());
arrNotSubmitFields.AddRange(rowSubmit["非汇总字段"].ToString().Split(';'));
strClassFieldColumn=rowSubmit["分类汇总分类列"].ToString();
if(strClassFieldColumn.Length==0)
strClassFieldColumn="0";
strClassSubColumns=rowSubmit["分类汇总统计列"].ToString();
}
//打开
Workbookworkbook=newWorkbook();
workbook.Open(p_FileName);
Worksheetworksheet=workbook.Worksheets[0];
Cellscells=worksheet.Cells;
//查询操作员等特殊信息
stringstrValue=cells[0,0].StringValue.Replace("","").Replace(",",",").Replace(";",";");
//清空存放操作员信息等的单元格
cells[0,0].PutValue("");
foreach(stringstrinstrValue.Split(';'))
{
string[]strInfo=str.Split(',');
if(strInfo.Length!
=3)
continue;
stringstrMessage="";
switch(strInfo[2])
{
case"{操作员}":
strMessage=Lqjt.OpInfo.OpName;
break;
case"{公司名称}":
ArrayListarr=newArrayList();
stringstrCompany;
foreach(DataRowrowinp_Table.Rows)
{
strCompany=row["公司名称"].ToString();
if(arr.IndexOf(strCompany)<0)
{
arr.Add(strCompany);
strMessage+=strCompany;
}
}
break;
case"{今日}":
strMessage=Tools.DateTimeToStr(Tools.Today);
break;
}
if(strMessage.Length>0)
cells[int.Parse(strInfo[0])-1,int.Parse(strInfo[1])-1].PutValue(strMessage);
elseif(strInfo[2].ToLower().IndexOf("{field:
")>-1)//某一个字段的值
{
stringstrField=strInfo[2].Replace("{field:
","");
strField=strField.Replace("}","");//去掉标记符
if(p_Table.Rows.Count>0)
{
try
{
cells[int.Parse(strInfo[0])-1,int.Parse(strInfo[1])-1].PutValue(p_Table.Rows[0][strField].ToString());
}
catch
{
}
}
}
}
//============得到标题式内容==============
strValue=cells[0,2].StringValue.Replace("","").Replace(",",",").Replace(";",";");
//清空存放标题内容的单元格
cells[0,2].PutValue("");
if(strValue.Length>0)
{
ArrayListarrTitle=newArrayList();
if(p_TitleRow!
=null)
arrTitle=Tools.GetTableColCaptions(p_TitleRow.Table);
foreach(stringstrinstrValue.Split(';'))
{
string[]strInfo=str.Split(',');
if(strInfo.Length!
=3)
continue;
if(p_TitleRow!
=null)
{
ArrayListarr=GetCellValue(strInfo[2],p_TitleRow,arrTitle);
cells[int.Parse(strInfo[0])-1,int.Parse(strInfo[1])-1].PutValue(Tools.ArrayToInStr(arr).Replace(",",""));
}
elseif(p_Table.Rows.Count>0&&(arrTableColumns.IndexOf(strInfo[2])>-1))
{
cells[int.Parse(strInfo[0])-1,int.Parse(strInfo[1])-1].PutValue(p_Table.Rows[0][strInfo[2]].ToString());
}
}
}
//=============得到报表内容=================
intstartx=0,starty=0,width=0;
strValue=cells[0,1].StringValue.Replace("","").Replace(",",",").Replace(";",";");
//将存放报表起始单元格信息清空
cells[0,1].PutValue("");
//根据信息分离出数据起始行、列、列数
foreach(stringstrinstrValue.Split(','))
{
if(starty==0)
starty=System.Int32.Parse(str);
elseif(startx==0)
startx=System.Int32.Parse(str);
elseif(width==0)
width=System.Int32.Parse(str);
}
//由于CELL索引从0开始,因此,起始行/列-1
startx--;
starty--;
//创建一个表,存放实际用到的数据
DataTabletbDetail=newDataTable();
//实际用到的列
ArrayListarrNeedColumns=newArrayList();
inti=0,j=0;
for(i=0;i { strValue=cells[starty,startx+i].StringValue; DataColumncol; if(arrTableColumns.IndexOf(strValue)>-1) { arrNeedColumns.Add(strValue); TypemyType=p_Table.Columns[strValue].DataType; if(Tools.IsNumbericDateType(myType)) col=newDataColumn("col_"+i.ToString(),myType); else col=newDataColumn("col_"+i.ToString(),typeof(string)); } else { arrNeedColumns.Add(""); col=newDataColumn("col_"+i.ToString(),typeof(string)); } tbDetail.Columns.Add(col); } i=0; //逐行添加数据 intnKey=1; foreach(DataRowrowinTools.FormatDataTable(p_Table).Rows) { DataRowr=tbDetail.NewRow(); j=0; foreach(stringstrColNameinarrNeedColumns) { if(strColName=="序号") r[j]=nKey++; elseif(strColName.Length>0) { strValue=row[strColName].ToString(); if(strValue.Length>0) r[j]=strValue; else r[j]=DBNull.Value; } else r[j]=DBNull.Value; j++; } tbDetail.Rows.Add(r); } //清空起始行,并填入汇总数据 for(j=0;j { stringstrColName=arrNeedColumns[j].ToString(); if(strColName=="序号") { if(bAutoSubmit) cells[starty,j].PutValue("合计"); else cells[starty,j].PutValue(""); } else { //对数字字段进行汇总 TypemyType=typeof(string); if(strColName.Length>0&&arrNotSubmitFields.IndexOf(strColName)<0) myType=p_Table.Columns[strColName].DataType; if(Tools.IsNumbericDateType(myType)) { strValue=p_Table.Compute("sum("+strColName+")","").ToString(); if(strValue.Length>0) cells[starty,j].PutValue(double.Parse(strValue)); else cells[starty,j].PutValue(""); } else cells[starty,j].PutValue(""); } } //将数据插入到EXCEL中 cells.ImportDataTable(tbDetail,false,starty,startx); if(AfterProExcel! =null) AfterProExcel(p_ReportTableName,starty,startx,width,worksheet,p_Table); //设置边框 for(i=starty;i { for(j=startx;j { Tools.SetCellBorder(worksheet.Cells[i,j]); } } //分类汇总,暂缺 workbook.Save(p_FileName); System.Diagnostics.Process.Start(p_FileName); } /// ///根据指定的字段名(可能是组合表达式)、数据行得到实际的值 /// /// /// /// /// privateArrayListGetCellValue(stringp_FieldName,DataRowp_DataRow,ArrayListp_ArrayTableColumns) { ArrayListarr=newArrayList(); ArrayListarrFields=newArrayList(p_FieldName.Split('+'));//将字段组合分开 foreach(stringstrFieldNameinarrFields) { if(strFieldName.Length==0) continue; if(strFieldName.ToUpper().IndexOf("T: ")>-1)//纯文本 { arr.Add(strFieldName.Replace("T: ","")); } elseif(strFieldName.ToUpper().IndexOf("UPPER: ")>-1)//转换为大写 { stringstrValue=strFieldName.ToUpper().Replace("UPPER: ",""); decimalfValue; if(decimal.TryParse(p_DataRow[strValue].ToString(),outfValue)) arr.Add(Tools.ToUpper(fValue)); } else//直接是字段名 { if(p_ArrayTableColumns.IndexOf(strFieldName)>-1) { System.TypemyType=p_DataRow.Table.Columns[strFieldName].DataType; if(myType==typeof(byte[])) continue; stringstrValue=p_DataRow[strFieldName].ToString(); if(strValue.Length==0) continue; if(myType==typeof(System.DateTime)) { strValue=Tools.DateTimeToStr(DateTime.Parse(strValue)); } elseif(myType==typeof(bool)) { //根据中国人习惯,bool形正确的显示√,否则不显示 if(bool.Parse(strValue)) strValue+="√"; else strValue=""; } arr.Add(strValue); } } } returnarr; } /// ///根据当前的功能,选择一个报表类型 /// /// ///
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- WordExcel 报表 源码