C#利用DCOM组件动态生成WORD模板
有时候客户要求我们能够按照系统规制生产模板,我们给出的解决方案是利用OFFICE组件在服务器段生成客户的需求,通过加密处理分发给各个用户。这个在B/S模式中是非常有必要的。
有时候客户要求我们能够按照系统规制生产模板,我们给出的解决方案是利用OFFICE组件在服务器段生成客户的需求,通过加密处理分发给各个用户。这个在B/S模式中是非常有必要的。这段时间正在研究WEB下OFFICE在线编辑功能
部分代码如下
关于怎么应用DCOM组件网上的文章很多。可以直接GOOGLE一下.
部分代码如下
生成报告 动态添加表格到WORD中#region 生成报告 动态添加表格到WORD中
/**//// <summary>
/// 动态添加表格到WORD中
/// </summary>
/// <param name="_ds">生成的数据分两个表格体现</param>
/// <param name="_Ratifier"></param>
/// <param name="_Corrector"></param>
/// <param name="_Checker"></param>
public void DymicalReport(ref DataSet _ds,string _Ratifier,string _Corrector, string _Checker)
{
//Open The Word
object filename= m_SourcePath;
object newTemplate=System.Reflection.Missing.Value; //Not creating a template.
object documentType=System.Reflection.Missing.Value; //Plain old text document.
object visible=true; //Show the doc while we work.;
// Microsoft.Office.Interop.Word.Application wordApp=new ApplicationClass();
Microsoft.Office.Interop.Word.Document wordDoc=wordApp.Documents.Add(ref filename,ref newTemplate,ref documentType,ref visible);
//Sleep
System.Threading.Thread.Sleep(10);
//Deal With The BookMark
object tmp="";
System.DateTime dtime=DateTime.Now;
int m1=0;
for(int i=0;i<_ds.Tables[0].Rows.Count;i++)
{
for(int j=0;j<_ds.Tables[0].Columns.Count;j++)
{
try
{
m1=i+1;
tmp=_ds.Tables[0].Columns[j].ColumnName.ToString()+m1.ToString();
if(_ds.Tables[0].Rows[i][j].ToString()==null||_ds.Tables[0].Rows[i][j].ToString().Trim()==""||_ds.Tables[0].Rows[i][j].ToString()=="0")
wordDoc.Bookmarks.get_Item(ref tmp).Range.Text="/";
else
wordDoc.Bookmarks.get_Item(ref tmp).Range.Text=_ds.Tables[0].Rows[i][j].ToString();
}
catch{}
}
}
//自动生成报告
//从结果集中取得返回的表的有关数据,为word建table做准备
int row,col;
col=_ds.Tables[1].Columns.Count;
row=_ds.Tables[1].Rows.Count;
Microsoft.Office.Interop.Word.Table tbl = wordDoc.Tables[2];
for(int k=0;k<row+2;k++)
{
object row1 = tbl.Rows[1] as object;
tbl.Rows.Add(ref row1);
tbl.Rows[1].Range.Bold=0;
}
tbl.Range.Font.Bold=0;//设置字体颜色深度
tbl.Rows[1].Range.Bold=3;
tbl.Cell(1,1).Range.Text="序号";
tbl.Cell(1,2).Range.Text="检测项目";
tbl.Cell(1,3).Range.Text="计量单位";
tbl.Cell(1,4).Range.Text="技术要求";
tbl.Cell(1,5).Range.Text="检测结果";
tbl.Cell(1,6).Range.Text="单项评定";
Cell cell1;
for(int i=0;i<row;i++) //下标注意,ds.Tables[1].Rows[i][j]从[0][0]开始
for(int j=0;j<6;j++)
{
cell1=tbl.Cell(i+2,j+1);//留出第一行是标题,第一列是行号的位置
if(j==0)//输出列号
cell1.Range.Text=(i+1).ToString();
else
cell1.Range.Text=_ds.Tables[1].Rows[i][j-1].ToString();
// cell1.Range.Text="zk";
}
object start=tbl.Cell(row+2,2).Range.Start;
object end=tbl.Cell(row+2,6).Range.End;
Range rng=wordDoc.Range(ref start,ref end);
rng.Start=(int)start;
rng.End=(int)end;
rng.Cells.Merge();
cell1=tbl.Cell(row+2,1);
cell1.Range.Text="结论";
start=tbl.Cell(row+3,2).Range.Start;
end=tbl.Cell(row+3,6).Range.End;
rng=wordDoc.Range(ref start,ref end);
rng.Start=(int)start;
rng.End=(int)end;
rng.Cells.Merge();
cell1=tbl.Cell(row+3,1);
cell1.Range.Text="报告说明";
cell1=tbl.Cell(row+3,2);
cell1.Range.Font.Size=8.0f;
cell1.Range.Text="1.若对本报告有异议,请于收到报告之日起十五日内,以书面形式向本中心提出,逾期视为对报告无异议。"+
"2.报告未加盖本中心检测报告专用章或公章,以及未加贴本中心防伪标记均为无效。"+
"3.经本中心同意复印的检验报告,应重新加盖本中心检测报告专用章或公章后方为有效。";
//插入报告编号
if(ReportSN!="")
{
tmp="ReportSN";
// if(this.FindBookmark(wordDoc,tmp))
// {
try
{
wordDoc.Bookmarks.get_Item(ref tmp).Range.Text=_ds.Tables[0].Rows[0]["OrderSN"].ToString();
}
catch{}
// }
}
//插入报告生成日期
string now;
now =DateTime.Now.Year+"年"+DateTime.Now.Month+"月"+DateTime.Now.Day+"日";
tmp="ReportDate";
// if(this.FindBookmark(wordDoc,tmp))
// {
try
{
wordDoc.Bookmarks.get_Item(ref tmp).Range.Text=now.ToString();
}
catch{}
//sleep 300
System.Threading.Thread.Sleep(1);
//插入数字签名
if(_Ratifier!="")
{
this.InsertWordPic(wordApp,wordDoc,_Ratifier,"Ratifier",100,40);
}
if(_Corrector!="")
{
this.InsertWordPic(wordApp,wordDoc,_Corrector,"Corrector",100,40);
}
if(_Checker!="")
{
this.InsertWordPic(wordApp,wordDoc,_Checker,"Checker",100,40);
}
//Close And Quit The Word
object optional=System.Reflection.Missing.Value;
object tmpPath=m_SavePath;
object pwd="findword_fish";
wordDoc.Application.ActiveDocument.Protect(Microsoft.Office.Interop.Word.WdProtectionType.wdAllowOnlyReading,ref optional,ref pwd,ref optional,ref optional);
wordDoc.SaveAs2000(ref tmpPath,
ref optional,
ref optional,
ref optional,
ref optional,
ref optional,
ref optional,
ref optional,
ref optional,
ref optional,
ref optional);
//关闭操作
object saveChanges = Microsoft.Office.Interop.Word.WdSaveOptions.wdDoNotSaveChanges;
wordDoc.Close(ref saveChanges, ref optional, ref optional);
}
#endregion
/**//// <summary>
/// 动态添加表格到WORD中
/// </summary>
/// <param name="_ds">生成的数据分两个表格体现</param>
/// <param name="_Ratifier"></param>
/// <param name="_Corrector"></param>
/// <param name="_Checker"></param>
public void DymicalReport(ref DataSet _ds,string _Ratifier,string _Corrector, string _Checker)
{
//Open The Word
object filename= m_SourcePath;
object newTemplate=System.Reflection.Missing.Value; //Not creating a template.
object documentType=System.Reflection.Missing.Value; //Plain old text document.
object visible=true; //Show the doc while we work.;
// Microsoft.Office.Interop.Word.Application wordApp=new ApplicationClass();
Microsoft.Office.Interop.Word.Document wordDoc=wordApp.Documents.Add(ref filename,ref newTemplate,ref documentType,ref visible);
//Sleep
System.Threading.Thread.Sleep(10);
//Deal With The BookMark
object tmp="";
System.DateTime dtime=DateTime.Now;
int m1=0;
for(int i=0;i<_ds.Tables[0].Rows.Count;i++)
{
for(int j=0;j<_ds.Tables[0].Columns.Count;j++)
{
try
{
m1=i+1;
tmp=_ds.Tables[0].Columns[j].ColumnName.ToString()+m1.ToString();
if(_ds.Tables[0].Rows[i][j].ToString()==null||_ds.Tables[0].Rows[i][j].ToString().Trim()==""||_ds.Tables[0].Rows[i][j].ToString()=="0")
wordDoc.Bookmarks.get_Item(ref tmp).Range.Text="/";
else
wordDoc.Bookmarks.get_Item(ref tmp).Range.Text=_ds.Tables[0].Rows[i][j].ToString();
}
catch{}
}
}
//自动生成报告
//从结果集中取得返回的表的有关数据,为word建table做准备
int row,col;
col=_ds.Tables[1].Columns.Count;
row=_ds.Tables[1].Rows.Count;
Microsoft.Office.Interop.Word.Table tbl = wordDoc.Tables[2];
for(int k=0;k<row+2;k++)
{
object row1 = tbl.Rows[1] as object;
tbl.Rows.Add(ref row1);
tbl.Rows[1].Range.Bold=0;
}
tbl.Range.Font.Bold=0;//设置字体颜色深度
tbl.Rows[1].Range.Bold=3;
tbl.Cell(1,1).Range.Text="序号";
tbl.Cell(1,2).Range.Text="检测项目";
tbl.Cell(1,3).Range.Text="计量单位";
tbl.Cell(1,4).Range.Text="技术要求";
tbl.Cell(1,5).Range.Text="检测结果";
tbl.Cell(1,6).Range.Text="单项评定";
Cell cell1;
for(int i=0;i<row;i++) //下标注意,ds.Tables[1].Rows[i][j]从[0][0]开始
for(int j=0;j<6;j++)
{
cell1=tbl.Cell(i+2,j+1);//留出第一行是标题,第一列是行号的位置
if(j==0)//输出列号
cell1.Range.Text=(i+1).ToString();
else
cell1.Range.Text=_ds.Tables[1].Rows[i][j-1].ToString();
// cell1.Range.Text="zk";
}
object start=tbl.Cell(row+2,2).Range.Start;
object end=tbl.Cell(row+2,6).Range.End;
Range rng=wordDoc.Range(ref start,ref end);
rng.Start=(int)start;
rng.End=(int)end;
rng.Cells.Merge();
cell1=tbl.Cell(row+2,1);
cell1.Range.Text="结论";
start=tbl.Cell(row+3,2).Range.Start;
end=tbl.Cell(row+3,6).Range.End;
rng=wordDoc.Range(ref start,ref end);
rng.Start=(int)start;
rng.End=(int)end;
rng.Cells.Merge();
cell1=tbl.Cell(row+3,1);
cell1.Range.Text="报告说明";
cell1=tbl.Cell(row+3,2);
cell1.Range.Font.Size=8.0f;
cell1.Range.Text="1.若对本报告有异议,请于收到报告之日起十五日内,以书面形式向本中心提出,逾期视为对报告无异议。"+
"2.报告未加盖本中心检测报告专用章或公章,以及未加贴本中心防伪标记均为无效。"+
"3.经本中心同意复印的检验报告,应重新加盖本中心检测报告专用章或公章后方为有效。";
//插入报告编号
if(ReportSN!="")
{
tmp="ReportSN";
// if(this.FindBookmark(wordDoc,tmp))
// {
try
{
wordDoc.Bookmarks.get_Item(ref tmp).Range.Text=_ds.Tables[0].Rows[0]["OrderSN"].ToString();
}
catch{}
// }
}
//插入报告生成日期
string now;
now =DateTime.Now.Year+"年"+DateTime.Now.Month+"月"+DateTime.Now.Day+"日";
tmp="ReportDate";
// if(this.FindBookmark(wordDoc,tmp))
// {
try
{
wordDoc.Bookmarks.get_Item(ref tmp).Range.Text=now.ToString();
}
catch{}
//sleep 300
System.Threading.Thread.Sleep(1);
//插入数字签名
if(_Ratifier!="")
{
this.InsertWordPic(wordApp,wordDoc,_Ratifier,"Ratifier",100,40);
}
if(_Corrector!="")
{
this.InsertWordPic(wordApp,wordDoc,_Corrector,"Corrector",100,40);
}
if(_Checker!="")
{
this.InsertWordPic(wordApp,wordDoc,_Checker,"Checker",100,40);
}
//Close And Quit The Word
object optional=System.Reflection.Missing.Value;
object tmpPath=m_SavePath;
object pwd="findword_fish";
wordDoc.Application.ActiveDocument.Protect(Microsoft.Office.Interop.Word.WdProtectionType.wdAllowOnlyReading,ref optional,ref pwd,ref optional,ref optional);
wordDoc.SaveAs2000(ref tmpPath,
ref optional,
ref optional,
ref optional,
ref optional,
ref optional,
ref optional,
ref optional,
ref optional,
ref optional,
ref optional);
//关闭操作
object saveChanges = Microsoft.Office.Interop.Word.WdSaveOptions.wdDoNotSaveChanges;
wordDoc.Close(ref saveChanges, ref optional, ref optional);
}
#endregion
关于怎么应用DCOM组件网上的文章很多。可以直接GOOGLE一下.
作者:拒绝潜水的鱼
出处:http://slave2.cnblogs.com/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
出处:http://slave2.cnblogs.com/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。