WordExcel报表源码Word文件下载.docx
- 文档编号:22164524
- 上传时间:2023-02-02
- 格式:DOCX
- 页数:18
- 大小:19.23KB
WordExcel报表源码Word文件下载.docx
《WordExcel报表源码Word文件下载.docx》由会员分享,可在线阅读,更多相关《WordExcel报表源码Word文件下载.docx(18页珍藏版)》请在冰豆网上搜索。
p_Startx"
报表实际数据开始的行<
p_Width"
报表实际数据的列数<
p_ExcelSheet"
当前操作的Excel.Worksheet<
p_Table"
存放数据的表<
publicdelegatevoidAfterProExcelDef(stringp_ReportTableName,intp_Starty,intp_Startx,intp_Width,Worksheetp_ExcelSheet,DataTablep_Table);
///AfterProExcelDef的具体实例
publicAfterProExcelDefAfterProExcel=null;
///利用Word生成简历式报表
存放实际的数据<
p_FileName"
已下载的文件名<
publicvoidMakeDetailReport(DataTablep_Table,stringp_FileName)
try
//word采用邮件合并,因此,手工添加操作员/今日两个特殊域
DataTabletb=p_Table.Copy();
DataColumncol=newDataColumn("
{操作员}"
typeof(string));
tb.Columns.Add(col);
col=newDataColumn("
{今日}"
stringstrOp=Lqjt.OpInfo.OpName;
stringstrToday=Tools.DateTimeToStr(Tools.Today);
foreach(DataRowrowintb.Rows)
row["
]=strOp;
]=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格式的报表
p_ReportId"
报表模板序号<
下载后的文件名<
存放实际数据的Table<
p_TitleRow"
存放标题式的数据行<
报表名称,用于委托,以由应用程序根据报表名称做进一步处理<
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["
分类汇总统计列"
//打开
Workbookworkbook=newWorkbook();
workbook.Open(p_FileName);
Worksheetworksheet=workbook.Worksheets[0];
Cellscells=worksheet.Cells;
//查询操作员等特殊信息
stringstrValue=cells[0,0].StringValue.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;
{公司名称}"
ArrayListarr=newArrayList();
stringstrCompany;
foreach(DataRowrowinp_Table.Rows)
strCompany=row["
公司名称"
if(arr.IndexOf(strCompany)<
0)
arr.Add(strCompany);
strMessage+=strCompany;
case"
strMessage=Tools.DateTimeToStr(Tools.Today);
if(strMessage.Length>
cells[int.Parse(strInfo[0])-1,int.Parse(strInfo[1])-1].PutValue(strMessage);
elseif(strInfo[2].ToLower().IndexOf("
{field:
)>
-1)//某一个字段的值
stringstrField=strInfo[2].Replace("
strField=strField.Replace("
}"
//去掉标记符
if(p_Table.Rows.Count>
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("
//清空存放标题内容的单元格
cells[0,2].PutValue("
if(strValue.Length>
ArrayListarrTitle=newArrayList();
if(p_TitleRow!
arrTitle=Tools.GetTableColCaptions(p_TitleRow.Table);
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("
//将存放报表起始单元格信息清空
cells[0,1].PutValue("
//根据信息分离出数据起始行、列、列数
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<
width;
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_"
+i.ToString(),myType);
else
+i.ToString(),typeof(string));
arrNeedColumns.Add("
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>
strValue=row[strColName].ToString();
r[j]=strValue;
r[j]=DBNull.Value;
j++;
tbDetail.Rows.Add(r);
//清空起始行,并填入汇总数据
for(j=0;
j<
j++)
stringstrColName=arrNeedColumns[j].ToString();
if(bAutoSubmit)
cells[starty,j].PutValue("
合计"
//对数字字段进行汇总
TypemyType=typeof(string);
if(strColName.Length>
arrNotSubmitFields.IndexOf(strColName)<
myType=p_Table.Columns[strColName].DataType;
strValue=p_Table.Compute("
sum("
+strColName+"
)"
).ToString();
cells[starty,j].PutValue(double.Parse(strValue));
//将数据插入到EXCEL中
cells.ImportDataTable(tbDetail,false,starty,startx);
if(AfterProExcel!
AfterProExcel(p_ReportTableName,starty,startx,width,worksheet,p_Table);
//设置边框
for(i=starty;
starty+p_Table.Rows.Count+1;
for(j=startx;
startx+width;
Tools.SetCellBorder(worksheet.Cells[i,j]);
//分类汇总,暂缺
workbook.Save(p_FileName);
///根据指定的字段名(可能是组合表达式)、数据行得到实际的值
p_FieldName"
字段名组合<
p_DataRow"
存放数据的行<
p_ArrayTableColumns"
表列名集合,虽然可以直接从p_DataRow中提取,但该函数使用频繁,直接传入速度快<
returns>
转换后的实际值(考虑到邮件合并,将字段分解后放到ArrayList中返回)<
/returns>
privateArrayListGetCellValue(stringp_FieldName,DataRowp_DataRow,ArrayListp_ArrayTableColumns)
ArrayListarrFields=newArrayList(p_FieldName.Split('
+'
//将字段组合分开
foreach(stringstrFieldNameinarrFields)
if(strFieldName.Length==0)
if(strFieldName.ToUpper().IndexOf("
T:
-1)//纯文本
arr.Add(strFieldName.Replace("
elseif(strFieldName.ToUpper().IndexOf("
UPPER:
-1)//转换为大写
stringstrValue=strFieldName.ToUpper().Replace("
decimalfValue;
if(decimal.TryParse(p_DataRow[strValue].ToString(),outfValue))
arr.Add(Tools.ToUpper(fValue));
else//直接是字段名
if(p_ArrayTableColumns.IndexOf(strFieldName)>
System.TypemyType=p_DataRow.Table.Columns[strFieldName].DataType;
if(myType==typeof(byte[]))
stringstrValue=p_DataRow[strFieldName].ToString();
if(strValue.Length==0)
if(myType==typeof(System.DateTime))
strValue=Tools.DateTimeToStr(DateTime.Parse(strValue));
elseif(myType==typeof(bool))
//根据中国人习惯,bool形正确的显示√,否则不显示
if(bool.Parse(strValue))
strValue+="
√"
strValue="
arr.Add(strValue);
returnarr;
///根据当前的功能,选择一个报表类型
p_FunName"
<
///
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- WordExcel 报表 源码