乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      Qt之操作Excel

       楓葉cn 2016-07-15

      Qt之操作Excel

      (2013-12-06 13:57:20)
      標(biāo)簽:

      qt

      qaxobject

      qt操作excel

      qtvba

      excelvba

      分類: Qt
          Visual Basic for Applications(VBA)是一種Visual Basic的一種宏語(yǔ)言,主要能用來(lái)擴(kuò)展Windows的應(yīng)用程式功能,特別是Microsoft Office軟件。也可說(shuō)是一種應(yīng)用程式視覺化的Basic Script。1994年發(fā)行的Excel 5.0版本中,即具備了VBA的宏功能。
          在VBA的參考手冊(cè)中就可以看到具體函數(shù)、屬性的用法,Qt操作Excel主要通過(guò) QAxObject + Excel VBA來(lái)實(shí)現(xiàn)!
          關(guān)于Qt對(duì)Excel的操作,網(wǎng)上的資料挺多的,但大多數(shù)都是比較基礎(chǔ)的,關(guān)于插入工作表(至最后一行)、刪除工作表、合并/拆分單元格、設(shè)置單元格背景色、設(shè)置單元格邊框色、設(shè)置單元格字體(類型、大小、加粗、斜體、下劃線、顏色等)、以及設(shè)置單元格對(duì)齊方式等用法都沒有怎么提到,今天就總結(jié)一下有關(guān)Qt對(duì)Excel的操作。
          Qt操作Excel,無(wú)論后綴是xls還是xlsx都可以。
          如下,是我下載的一個(gè)Excel VBA參考手冊(cè),內(nèi)容不算太全!

      Qt之操作Excel

      Excel讀取
          
          為了便于測(cè)試,假設(shè)已存在一個(gè)excel文件,操作內(nèi)容已經(jīng)被紅色標(biāo)記出來(lái)。如下所示:

      主要讀取內(nèi)容:
      • 標(biāo)題
      • 工作表數(shù)目
      • 工作表名稱
      • 起始行
      • 起始列
      • 行數(shù)
      • 列數(shù)
      • 單元格內(nèi)容

      代碼如下:

      QAxObject excel("Excel.Application");  
      excel.setProperty("Visible", true);  
      QAxObject *work_books = excel.querySubObject("WorkBooks");  
      work_books->dynamicCall("Open (const QString&)", QString("E:/test.xlsx"));
      QVariant title_value = excel.property("Caption");  //獲取標(biāo)題
      qDebug()<<QString("excel title : ")<<title_value;  
      QAxObject *work_book = excel.querySubObject("ActiveWorkBook");  
      QAxObject *work_sheets = work_book->querySubObject("Sheets");  //Sheets也可換用WorkSheets

      int sheet_count = work_sheets->property("Count").toInt();  //獲取工作表數(shù)目
      qDebug()<<QString("sheet count : ")<<sheet_count;  
      for(int i=1; i<=sheet_count; i++)  
      {  
      QAxObject *work_sheet = work_book->querySubObject("Sheets(int)", i);  //Sheets(int)也可換用Worksheets(int)
      QString work_sheet_name = work_sheet->property("Name").toString();  //獲取工作表名稱
      QString message = QString("sheet ")+QString::number(i, 10)+ QString(" name");
      qDebug()<<message<<work_sheet_name;  
      }
      if(sheet_count > 0)
      {
      QAxObject *work_sheet = work_book->querySubObject("Sheets(int)", 1);  
      QAxObject *used_range = work_sheet->querySubObject("UsedRange");  
      QAxObject *rows = used_range->querySubObject("Rows");  
      QAxObject *columns = used_range->querySubObject("Columns");  
      int row_start = used_range->property("Row").toInt();  //獲取起始行   
      int column_start = used_range->property("Column").toInt();  //獲取起始列
      int row_count = rows->property("Count").toInt();  //獲取行數(shù)
      int column_count = columns->property("Count").toInt();  //獲取列數(shù)
      for(int i=row_start; i
      {  
      for(int j=column_start; j
      {  
      QAxObject *cell = work_sheet->querySubObject("Cells(int,int)", i, j);  
      QVariant cell_value = cell->property("Value");  //獲取單元格內(nèi)容
      QString message = QString("row-")+QString::number(i, 10)+QString("-column-")+QString::number(j, 10)+QString(":");
      qDebug()<<message<<cell_value;  
      }  
      }  
      }

      效果如下:

      Qt之操作Excel

      Excel增、刪、改
      主要操作:
      • 設(shè)置標(biāo)題
      • 插入工作表(至最后一行)
      • 設(shè)置工作表名稱
      • 刪除工作表
      • 設(shè)置單元格內(nèi)容
      • 設(shè)置單元格字體(類型、大小、加粗、斜體、下劃線、顏色等)
      • 設(shè)置單元格對(duì)齊方式
      • 設(shè)置單元格高度、寬度
      • 設(shè)置單元格背景色、邊框色
      • 合并/拆分單元格
      • 清空單元格
      代碼如下:

      QAxObject excel("Excel.Application");  
      excel.setProperty("Visible", true);  
      QAxObject *work_books = excel.querySubObject("WorkBooks");  
      work_books->dynamicCall("Open(const QString&)", "E:\\test.xlsx");
      excel.setProperty("Caption", "Qt Excel");
      QAxObject *work_book = excel.querySubObject("ActiveWorkBook");  
      QAxObject *work_sheets = work_book->querySubObject("Sheets");  //Sheets也可換用WorkSheets

      //刪除工作表(刪除第一個(gè))
      QAxObject *first_sheet = work_sheets->querySubObject("Item(int)", 1);
      first_sheet->dynamicCall("delete");

      //插入工作表(插入至最后一行)
      int sheet_count = work_sheets->property("Count").toInt();  //獲取工作表數(shù)目
      QAxObject *last_sheet = work_sheets->querySubObject("Item(int)", sheet_count);
      QAxObject *work_sheet = work_sheets->querySubObject("Add(QVariant)", last_sheet->asVariant());
      last_sheet->dynamicCall("Move(QVariant)", work_sheet->asVariant());

      work_sheet->setProperty("Name", "Qt Sheet");  //設(shè)置工作表名稱

      //操作單元格(第2行第2列)
      QAxObject *cell = work_sheet->querySubObject("Cells(int,int)", 2, 2);
      cell->setProperty("Value", "Java C++ C# PHP Perl Python Delphi Ruby");  //設(shè)置單元格值
      cell->setProperty("RowHeight", 50);  //設(shè)置單元格行高
      cell->setProperty("ColumnWidth", 30);  //設(shè)置單元格列寬
      cell->setProperty("HorizontalAlignment", -4108); //左對(duì)齊(xlLeft):-4131  居中(xlCenter):-4108  右對(duì)齊(xlRight):-4152
      cell->setProperty("VerticalAlignment", -4108);  //上對(duì)齊(xlTop)-4160 居中(xlCenter):-4108  下對(duì)齊(xlBottom):-4107
      cell->setProperty("WrapText", true);  //內(nèi)容過(guò)多,自動(dòng)換行
      //cell->dynamicCall("ClearContents()");  //清空單元格內(nèi)容

      QAxObject* interior = cell->querySubObject("Interior");
      interior->setProperty("Color", QColor(0, 255, 0));   //設(shè)置單元格背景色(綠色)

      QAxObject* border = cell->querySubObject("Borders"); 
      border->setProperty("Color", QColor(0, 0, 255));   //設(shè)置單元格邊框色(藍(lán)色)

      QAxObject *font = cell->querySubObject("Font");  //獲取單元格字體
      font->setProperty("Name", QStringLiteral("華文彩云"));  //設(shè)置單元格字體
      font->setProperty("Bold", true);  //設(shè)置單元格字體加粗
      font->setProperty("Size", 20);  //設(shè)置單元格字體大小
      font->setProperty("Italic", true);  //設(shè)置單元格字體斜體
      font->setProperty("Underline", 2);  //設(shè)置單元格下劃線
      font->setProperty("Color", QColor(255, 0, 0));  //設(shè)置單元格字體顏色(紅色)

      //設(shè)置單元格內(nèi)容,并合并單元格(第5行第3列-第8行第5列)
      QAxObject *cell_5_6 = work_sheet->querySubObject("Cells(int,int)", 5, 3);
      cell_5_6->setProperty("Value", "Java");  //設(shè)置單元格值
      QAxObject *cell_8_5 = work_sheet->querySubObject("Cells(int,int)", 8, 5);
      cell_8_5->setProperty("Value", "C++");

      QString merge_cell;
      merge_cell.append(QChar(3 - 1 + 'A'));  //初始列
      merge_cell.append(QString::number(5));  //初始行
      merge_cell.append(":");
      merge_cell.append(QChar(5 - 1 + 'A'));  //終止列
      merge_cell.append(QString::number(8));  //終止行
      QAxObject *merge_range = work_sheet->querySubObject("Range(const QString&)", merge_cell);
      merge_range->setProperty("HorizontalAlignment", -4108);
      merge_range->setProperty("VerticalAlignment", -4108);
      merge_range->setProperty("WrapText", true);
      merge_range->setProperty("MergeCells", true);  //合并單元格
      //merge_range->setProperty("MergeCells", false);  //拆分單元格

      //work_book->dynamicCall("Save()");  //保存文件(為了對(duì)比test與下面的test2文件,這里不做保存操作) work_book->dynamicCall("SaveAs(const QString&)", "E:\\test2.xlsx");  //另存為另一個(gè)文件 
      work_book->dynamicCall("Close(Boolean)", false);  //關(guān)閉文件
      excel.dynamicCall("Quit(void)");  //退出

      效果如下:

      操作前:

      Qt之操作Excel

      操作后:

      Qt之操作Excel

          到這里很多人也許都在納悶,單元格的宏怎么獲取的?比如對(duì)齊方式(居中對(duì)齊),為什么值是-4108,而不是其他值呢?當(dāng)然那不是我隨便寫的,自己可以錄制宏,然后跟蹤。
      看下圖:
      Qt之操作Excel

      如上所講,已經(jīng)基本可以滿足常用的操作,如有更多專業(yè)需求,請(qǐng)參考Excel VBA...

      注:
          技術(shù)在于交流、溝通,轉(zhuǎn)載請(qǐng)注明出處并保持作品的完整性。

        本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
        轉(zhuǎn)藏 分享 獻(xiàn)花(0

        0條評(píng)論

        發(fā)表

        請(qǐng)遵守用戶 評(píng)論公約

        類似文章 更多