一个LinuxUnix下的excel库“xlslib”的使用及其简单封装

    技术2022-05-20  53

     

    下载地址:http://xlslib.sourceforge.net/简单封装的类:Excel.h #ifndef  Excel_h__ #define  Excel_h__   #include  <vector> using  namespace  std ;   #include  <xlslib.h> #include  <extformat.h> using  namespace  xlslib_core ;   ///Excel文件操作类 class   CExcel { public :      CExcel ();      ~CExcel (); private :      CExcel ( CExcel& pm_objExcel);      CExcel & operator=( CExcel& pm_objExcel);   private :     ///Excel 工作薄     workbook m_WorkBook;       ///Excel 工作表,使用之前必须先创建,参见<sheetrec.h>      worksheet * m_pWorkSheet;   private :       /*     注意:     测试发现Excel最多支持同时使用505种字体;     workbook::font()的每次调用都会创建并添加一个“字体”到excel文件中,所以     在这里保存了字体信息,使得每个不同的“字体”只创建并添加一次。       最多支持4028种不同的单元格格式;     workbook::xformat()的每次调用都会创建并添加一个“格式”到excel文件中,所以     在这里保存了格式信息,使得每个不同的“格式”只创建并添加一次。     */       /// 字体列表      vector < font_t*> m_FontPtrs;     /// 单元格格式列表      vector < xf_t*> m_FormatPtrs;      xf_t *  get_xf_t(string& pm_fontName,unsigned16_t pm_fontSize,unsigned16_t pm_fontBoldStyle);      font_t *  get_font_t(string& pm_fontName,unsigned16_t pm_fontSize,unsigned16_tpm_fontBoldStyle);   public :       ///创建一张工作表,注意:这个函数必须首先调用     void  CreateWorkSheet (const  string& pm_WorkSheetText);       ///保存Excel文件     void  SaveExcelFile (const  string& pm_FilePath);       ///设置单元格的文本     void  SetCellText (          unsigned16_t  pm_row,          unsigned16_t  pm_col,         const  string & pm_Text,          string  pm_FontName = "Arial",          unsigned16_t  pm_fontSize = 12,         bool pm_FontBold = false);       ///设置单元格的数字     void  SetCellNumber (          unsigned16_t  pm_row,          unsigned16_t  pm_col,         double pm_Number,          string  pm_FontName = "Arial",          unsigned16_t  pm_fontSize = 12 ,         bool pm_FontBold = false);       ///合并单元格     void  MergeCells (          unsigned16_t  pm_first_row,          unsigned16_t  pm_first_col,          unsigned16_t  pm_last_row,          unsigned16_t  pm_last_col);       /**     * @brief 设置单元格的宽度,高度     * 这里有个问题:宽度和高度的单位不一致,需要通过多次设置不同的数据来找出一个合适的值。     */     void  SetSize (          unsigned16_t  pm_row,          unsigned16_t  pm_col,          unsigned16_t  pm_row_height,          unsigned16_t  pm_col_width);       ///设置单元格边框为黑色实线     void  SetCellBorder (          unsigned16_t  pm_row,          unsigned16_t  pm_col);       ///设置单元格的对齐方式     void  SetCellAlign (          unsigned16_t  pm_row,          unsigned16_t  pm_col,          halign_option_t  pm_ha_option,          valign_option_t  pm_va_option);       ///设置单元格的背景颜色     void  SetCellBgColor (          unsigned16_t  pm_row,          unsigned16_t  pm_col,          color_name_t  pm_color); };   #endif  // Excel_h__ 测试程序:test_xls.cpp /// c #include  <string.h> #include  <stdlib.h> #include  <assert.h>   /// unix #include  <sys/stat.h> #include  <signal.h> //sigset #include  <unistd.h> //sleep,access #include  <dirent.h> //DIR   /// stl #include  <string> #include  <iostream> #include  <vector> using  namespace  std ;   #include  "Excel.h"   int  main(int, char **, char **) {     CExcel objExcel;     objExcel.CreateWorkSheet("New Sheet1");       objExcel.MergeCells(0,0,0,3);     objExcel. SetCellText (0,0,"Test xlslib .","Microsoft Sans Serif",16,true);     objExcel. SetCellAlign (0,0,HALIGN_CENTER,VALIGN_CENTER);     objExcel. SetSize (0,0,20,20000);     objExcel. SetCellBgColor (0,0,CLR_GRAY50);     objExcel. SetCellBorder (0,0);     objExcel. SetCellBorder (0,1);     objExcel. SetCellBorder (0,2);     objExcel. SetCellBorder (0,3);       for (int i=1;i<20;i++)     {         objExcel. SetCellText (i,0,"Arial Black","Arial Black",12,true);         objExcel. SetSize (i,0,100,5500);         objExcel. SetCellAlign (i,0,HALIGN_GENERAL,VALIGN_CENTER);         objExcel. SetCellBgColor (i,0,CLR_TEAL);           objExcel. SetCellText (i,1,"Courier New","Courier New",14,true);         objExcel. SetSize (i,1,100,5500);           objExcel. SetCellText (i,2,"Default");           objExcel. SetCellNumber (i,3,i*10,"Dotum");         objExcel. SetCellBgColor (i,3,CLR_PINK);         objExcel. SetCellBorder (i,3);     }       objExcel. Save ExcelFile( "test_xls.xls");       return 0; } 以上程序在HP-UX上测试通过。完整的源码点这里下载(注意:将makefile中的路径根据实际情况进行修改)。

     


    最新回复(0)