《電子技術應用》
您所在的位置:首頁 > 其他 > 设计应用 > 用VC结合Excel实现复杂报表的制作
用VC结合Excel实现复杂报表的制作
陈清华 潘地林
淮南安徽理工大学机械工程系(232001)
摘要: 介绍了在VC中结合Excel创建和打印格式比较复杂的报表的具体方法。
關鍵詞: 报表设计
Abstract:
Key words :

摘   要: 介紹了在VC中結合Excel創建和打印格式比較復雜的報表的具體方法。
關鍵詞: VC  Excel  報表設計

   在數據庫管理系統的開發以及一些涉及到報表制作的應用領域,各種復雜格式的報表處理是一項煩瑣的工作。目前利用計算機輔助制作各種報表的方法基本都是在VB環境下操作的。事實上,VC作為另外一種功能強大的開發工具,在數據管理和操作方面同樣具有強大的功能,并提供了多種方式進行報表處理。例如可以先創建一個指向打印機的設備環境句柄,通過該句柄調用相關的繪圖函數,繪制空報表模版,并動態填入數據,輸出到打印機上。用這種方法制作格式簡單的報表時很方便,但是當碰到格式復雜的報表時,用Excel的電子表格制作功能結合VC的強大數據處理能力,將大大簡化復雜表格的設計制作工作。
1  實現方法
1.1 利用Excel創建報表的模版文件

  Excel具有強大的電子表格制作功能,利用其單元格的拆分、合并和格式設定,可以方便、快捷地繪制空白表格文檔,并可以隨時根據實際情況,重新設定報表格式,生成滿足用戶要求的模版文件。例如,當需要打印成百上千張格式一致的學生信息統計表時,若需要改變表格格式,只需要將模版文件稍加修改即可。
生成的工作表中每個單元格都有相應的編號,如“A9”和“G3”分別代表工作表中的A列第9行和G列第3行所對應的單元格。像這樣記錄要填充內容的單元格編號與要填充的數據字段是必要的。例如,設計一個學生信息卡,其格式如圖1所示。

  工作表中需要填姓名、性別和民族數據的單元格對應列為C列,年齡、籍貫和政治面貌對應E列,入學時間、所在系別和專業對應G列,其中行的編號為4~6,這樣就形成了一個模版文件。
  在程序中不需要直接操作模版文件,只需要將模版文件拷貝到一個副本中進行操作即可。在VC中進行文件操作不如在VB中方便。一種方法是直接利用CFile 類的操作成員函數來實現,但操作復雜。另一種有效的方法是利用Win32 API函數來實現對于文件的操作,例如要向第1列空白單元格填充學生姓名、性別和民族數據,則具體實現代碼如下:
  int nOk;
  char strSrc[ ]=″...\\student.xls\0″; //源文件路徑,省略號代表文件所在的相對路徑
  char strDst[ ]=″...\\studentbak.xls\0″; //目標文件路徑
  char strTitle[ ]=″File copying″; //進度題頭
  SHFILEOPSTRUCT FileOp;
  FileOp.hwnd=m_hWnd;
  FileOp.wFunc=FO_COPY;  //執行文件拷貝,將模版文件拷貝到臨時文件中
  FileOp.pFrom=strSrc;
  FileOp.pTo=strDst;
  FileOp.fFlags=FOF_ALLOWUNDO;
  FileOp.hNameMappings=NULL;
  FileOp.lpszProgressTitle=strTitle;
  nOk=SHFileOperation(&FileOp);
  if(nOk)
  TRACE(″There is an error:%d\n″,nOk);
  else
  TRACE(″SHFileOperation finished successfully\n″);
  if(FileOp.fAnyOperationsAborted)
  TRACE(″Operation was aborted!\n″);
1.2  將數據放入模版文件副本相應單元格中
  (1)在程序中導入mso9.dll、vbe6ext.olb和Excel9.olb庫文件。
  在需要調用Excel報表文檔的程序代碼所在的.Cpp文件頭,加入下面的代碼:
  #import <mso9.dll> no_namespace rename(″Document-
  Properties″,DocumentPropertiesXL″)
  #import <vbe6ext.olb> no_namespace
  #import <Excel9.olb> rename(″DialogBox″,″DialogBoxXL″)
  rename(″RGB″,″RBGXL″) rename(″DocumentProperties″,
     ″DocumentPropertiesXL″) no_dual_interfaces
  同時要在VC工具欄的工具菜單中點擊“選擇菜單”項,在彈出的選擇對話框中選擇目錄標簽,指定mso9.dll、vbe6ext.olb和Excel9.olb文件所在的目錄,否則程序將會編譯錯誤,提示找不到這些庫文件。默認情況下mso9.dll和Excel9.olb文件在Office安裝目錄下,而vbe6ext.olb文件在系統文件夾的共享文件中的VBA目錄下。
  (2)聲明并建立對Excel應用程序、工作簿和工作表對象變量的引用。
  using namespace Excel;
  _ApplicationPtr pXL;
  pXL->CreateInstance(L″Excel.Application.9″);
                 //創建Excel應用實例
  pXL->Visible=VARIANT_TRUE;
  _WorkbooksPtr pBooks=pXL->Workbooks;
  _WorkbookPtr pBook=pBooks->Open(″..\\studentbak.xls″);
                 //打開已創建的臨時模版文件
  _WorksheetPtr pSheet=pXL->ActiveSheet;//設定當前
                 //工作表
  pSheet->Name=″student″;//命名當前工作表
  (3)將數據填入工作表相應單元格。
  如果要操作的數據在學生信息數據庫的學生信息表中,則定義1個CRecordSet對象變量m_bSet,并用該變量操作數據庫中的數據(有關數據庫操作的細節見相關書籍)。給單元格賦值的具體代碼如下:
  m_bSet.MoveFirst( );
  do { CString row;
  char h [20];
  _itoa(k,h,10);//將整形變量轉換為字符變量 
  row=h;
  CString nsc=″C″+″4″;//填充姓名的單元格編號
  CString ahd=″C″+″5″;//填充性別的單元格編號
  CString ymn=″C″+″6″;//填充民族的單元格編號
               //在將上述字符串變量作為單元格編號使用以前,需要進
               //行強制類型轉化,否則將出錯
  _variant_t na,ma,ph;
  na=(_variant_t) (nsc);
  ma=(_variant_t) (ahd);
  ph=(_variant_t) (ymn);
  pSheet->Range[na]->Value=(_variant_t) (m_bSet.Stuname);
               //填充學生姓名數據
  pSheet->Range[ma]->Value=(_variant_t) (m_bSet.Stusex);
               //填充學生性別
  pSheet->Range[ph]->Value=(_variant_t) (m_bSet.Stunation);
               //填充學生民族
  m_bSet.MoveNext( );
  } while(!m_bSet.IsEOF( ));
  m_bSet.Close( );
  程序將一直執行,直到把數據庫中的數據讀取完畢。
1.3  報表打印
   試驗報表數據填寫完成后的打印工作可以用下面的語句直接實現。但注意在打印之前應對Excel臨時文件執行一次保存操作。
  pBook->Saved=VARIANT_TRUE;//保存文件
  pSheet->PrintOut( );//打印報表
  pBook->Close( );//關閉表單
  pXL->Quit( );//退出Excel
  由于打印工作是后臺操作,因此用戶看不到具體實現過程,只能看到報表從打印機中被打印出來。
2  結束語
  報表制作和打印的方法多種多樣,本文介紹了用VC結合Excel實現復雜報表制作的具體方法,該方法能高效、快捷地解決實際問題。
參考文獻
1   徐雄.在VB中調用Excel實現票據套打.計算機應用, 2001;(9)
2   北京源江科技開發公司制作.Visual C++編程資源大全(光 盤版).北京:北京萬水電子信息有限公司出版社,2001
3   官章全,唐小衛.Visual C++ 6.0編程實例詳解.北京:電子工業出版社,2001
 

此內容為AET網站原創,未經授權禁止轉載。
主站蜘蛛池模板: 日本久久精品视频| 亚洲91精品在线观看| 日韩av中文字幕第一页| 亚洲精品中文字幕在线| 久久婷婷开心| 亚洲综合色av| 国产精品毛片va一区二区三区| 亚洲综合av一区| 国产精品永久免费在线| 欧美精品一区二区三区免费播放| 亚洲自拍av在线| 99久久伊人精品影院 | 亚洲福利av| 国产精品视频自在线| 日韩美女视频中文字幕| 激情小说网站亚洲综合网| 久久天天躁狠狠躁夜夜躁| 久久亚洲成人精品| 日本高清一区| 日本一二三区视频在线| 日韩av成人在线观看| 在线视频不卡一区二区| 国产成a人亚洲精v品在线观看| 国产有码在线一区二区视频| 久久本道综合色狠狠五月 | 日本不卡在线观看| 日韩欧美精品免费| 奇米影视亚洲狠狠色| 欧美中文字幕在线观看视频| 欧美日本亚洲视频| 久久综合九九| 精品国产乱码久久久久| 韩国国内大量揄拍精品视频| 国产欧美日韩综合一区在线观看| 国产日韩视频在线播放| 国模精品娜娜一二三区| 国产欧美综合一区| www高清在线视频日韩欧美| av免费观看国产| 无码中文字幕色专区| 欧美在线中文字幕|