Qt 中讀寫Excel
阿新 • • 發佈:2019-02-20
開發時,需要將資料寫入到excel中,做成一個報表,以便於檢視,網上看了很多的例子,自己也仿照著寫了個。
首先需要安裝qtxlslwriter 這個庫,下載地址:
環境的搭建這兒不細說,需要的可以網上找,有很多。主要做的是讀和寫,方便檢視。
實現的是寫的功能,具體程式碼如下:
Qt版本為:Qt5.5.1MSVC2010
寫入excel
void c_excel::Slot_Write_Excel_File() { QXlsx::Document xlsx; QXlsx::Format format; format.setHorizontalAlignment(QXlsx::Format::AlignHCenter); format.setVerticalAlignment(QXlsx::Format::AlignVCenter); xlsx.setColumnWidth(3,60); xlsx.write("A1",tr("Device"),format); xlsx.write("B1",tr("State"),format); xlsx.write("C1",tr("Question"),format); xlsx.write("D1",tr("Time"),format); int nCount = EXCEL_COUNT; static int gnCount = 0; for (int i = 0; i < nCount; i++) { char buff[100]; memset(buff,0,sizeof(buff)); sprintf(buff,"IPC%d",++ gnCount); xlsx.write(i+2,1,buff,format); memset(buff,0,sizeof(buff)); sprintf(buff,"State: %d",gnCount); xlsx.write(i+2,2,buff,format); memset(buff,0,sizeof(buff)); sprintf(buff,"1111111111111111111111111111Question: %d",gnCount); xlsx.write(i+2,3,buff,format); memset(buff,0,sizeof(buff)); sprintf(buff,"111111111111111111Time: %d",gnCount); xlsx.write(i+2,4,buff,format); } // 新增Sheet頁面 xlsx.addSheet(); xlsx.addSheet(); xlsx.selectSheet("Sheet2"); // 選擇操作頁面 for (int i = 0; i < nCount; i++) { char buff[100]; memset(buff,0,sizeof(buff)); sprintf(buff,"IPC%d",++ gnCount); xlsx.write(i+2,1,buff,format); memset(buff,0,sizeof(buff)); sprintf(buff,"State: %d",gnCount); xlsx.write(i+2,2,buff,format); memset(buff,0,sizeof(buff)); sprintf(buff,"1111111111111111111111111111Question: %d",gnCount); xlsx.write(i+2,3,buff,format); memset(buff,0,sizeof(buff)); sprintf(buff,"111111111111111111Time: %d",gnCount); xlsx.write(i+2,4,buff,format); } bool bret = xlsx.saveAs(m_qstrfilename); QXlsx::Document xlsx2(m_qstrfilename);/*複製A到B*/ xlsx2.saveAs("B.xlsx"); if (bret) { emit signal_save_success(); } }
讀取excel
widget.cppvoid c_excel::Slot_Read_Excel_File() { QXlsx::Document xlsx(m_qstrfilename); QXlsx::CellRange range = xlsx.dimension(); int nrow = range.lastRow(); //int ncol = range.lastColumn(); for (int i = 0; i < nrow - 1; i++) { QString qstrip = xlsx.read(i+2,1).toString(); QString qstrrtsp1 = xlsx.read(i+2,2).toString(); QString qstrrtsp2 = xlsx.read(i+2,3).toString(); QString qstruser = xlsx.read(i+2,4).toString(); if (qstrip.isEmpty()) { continue; } } }
#include "widget.h" Widget::Widget(QWidget *parent) : QWidget(parent) { ui.setupUi(this); m_excel = new c_excel; m_excel->moveToThread(&m_thread); connect(ui.readBtn,SIGNAL(clicked()),m_excel,SLOT(Slot_Read_Excel_File())); //connect(ui.writeBtn,SIGNAL(clicked()),m_excel,SLOT(Slot_Write_Excel_File())); connect(ui.writeBtn,SIGNAL(clicked()),this,SLOT(Slot_Set_File_Name())); m_thread.start(); } Widget::~Widget() { m_thread.quit(); m_thread.wait(); } void Widget::Slot_Set_File_Name() { QString fileName = QFileDialog::getSaveFileName(NULL, tr("Excel file"),".",tr("Excel Files (*.xlsx)")); m_excel->SetFileName(fileName); }
編譯好的QtXlsx庫下載地址:點選開啟連結