基于office interop的自定义报表系统

来源:互联网 发布:淘宝贷款客服电话 编辑:程序博客网 时间:2024/06/05 19:37

老曹是个老计算机手了。与他共同研究的报表系统雏形终于编制成功了

请看

报表定义 

 

 

字段定义

字段添加

 

  1.  public void AddField(string caption, int reportid, bool isCombo, ArrayList infoset, ArrayList column,
  2.                              ArrayList dispNull, ArrayList dispMulti, ArrayList dispAll, ArrayList dispWhich,
  3.                              ArrayList orderby, ArrayList asc, string cond, string conditionControlStatus)
  4.         {
  5.             DBAccess dbaccess = new DBAccess(DBAccess.DBType.SQL);
  6.             dbaccess.Exe("insert into reportfield(reportid,iscombo) values(", reportid, isCombo, ")");
  7.             long reportfieldid = dbaccess.getIdentity();
  8.  
  9.             reportDoc.AddFieldOnSelect(caption,(int)reportfieldid);
  10.             for (int i = 0; i < infoset.Count; i++)
  11.             {
  12.                 dbaccess.Exe(
  13.                     "insert into reportfieldcolumn(reportfieldid,infoset,column_,dispnull,dispmulti,dispAll,dispwhich,orderby,asc_desc,condition,clausecontrol) values(",
  14.                     reportfieldid, infoset[i], column[i], dispNull[0], dispMulti[0], dispAll[0], dispWhich[0],
  15.                     orderby[0], asc[0], cond,conditionControlStatus,")");
  16.             }
  17.             dbaccess.Close();
  18.         }
  19.  

 reportDoc.AddFieldOnSelect使用了bridge模式,分离word/excel实现

excel的 

  1. public void AddFieldOnSelect(string caption, int id)
  2.         {
  3.             setCell(2, eApp.ActiveCell.Column, caption);
  4.             setCell(3, eApp.ActiveCell.Column, id.ToString());
  5.         }

 

word的复杂点

  1.   public void AddFieldOnSelect( string caption, int id)
  2.         {
  3.             Word.Selection sln = eApp.Selection;
  4.             eApp.Options.Overtype = false;
  5.             Word.Document WordDoc = null;
  6.             Object N = Type.Missing;
  7.             WordDoc = (Word.Document)webBrowser.Document;
  8.             Object Type1 = WdFieldType.wdFieldMacroButton;
  9.             object pos = sln.Start;
  10.             object pos2 = sln.End;
  11.             Word.Range rng = WordDoc.Range(ref pos, ref pos2);
  12.             Word.Field Field1 = WordDoc.Fields.Add(rng, ref Type1, ref N, ref N);
  13.             Field1.Code.Text = "MACROBUTTON  " + "field_ganbureport_" + id + " " + caption;
  14.         }
  15.