赞
踩
快要赶不上生活本身的温柔和可爱了。
提示:本文是作者学习的记录,若有错误指出,作者虚心请教。
一般程序按照16进制,8进制,2进制以及十进制来传输数据的,所以一般中文会在应用程序中形成乱码,为了避免这种情况,我们会在.cpp文件的开始将UTF-8编码
//设置编码为UTF8
static void SetUTF8Code()
{
#if (QT_VERSION <= QT_VERSION_CHECK(5,0,0))
QTextCodec *codec = QTextCodec::codecForName("UTF-8");
QTextCodec::setCodecForLocale(codec);
QTextCodec::setCodecForCStrings(codec);
QTextCodec::setCodecForTr(codec);
#endif
}
需要在QT官网上添加以下两个文件,记住自己的编译器(QTcreator是32位还是64位的)根据自己的需求下载对应的版本。
下载要求以及注意事项:
1. 将QtXlsxWriter-master解压,然后拷到任意一个盘下,C盘除外
2. 用QtCreator打开QtXlsxWriter-master的工程
3. 导入工程
4. 修改QVector,将QList改为QVector
5. 编译工程
6. 退出工程
7. 重新打开工程,编译工程
8. 退出工程,然后打开Qt的命令行,进入QtXlsxWriter-master的目录(注意是QT的命令行不是cmd命令行)
9. 输入qmake
10. 输入Mingw32-make
11. 等待编译完成.
12. Mingw32-make install
13. 等待安装完成。可使用命令行perl-v查看是否安装成功
首先要生成Excel文件的话,需要在Pro文件上添加
QT+=xlsx
在.h头文件里添加
#include <QtXlsx>
在.cpp文件里添加
#include <QtWidgets/QApplication>
#include <QtXlsx/QtXlsx>
.......
QXlsx::Document xlsx;
xlsx.write("A1", "Hello Qt!");
xlsx.saveAs("Test.xlsx");
.......
可在debug/ /Release目录下生成excel文件
绝对路径: 文件在硬盘上真正存在的路径。例如“EXCEL.xlsx”这个图片是存放在硬盘的“C:\TEST\目录下,那么 “EXCEL.xlsx”这个图片的绝对路径就是“C:\TEST\EXCEL.xlsx";
相对路径:由这个文件所在的路径引起的跟其它文件(或文件夹)的路径关系
如:当前文件1的路径是/user/File/文件1/文件1.txt,
文件2的路径是/user/File/文件2/文件2.txt
那么file2相对于file的路径就是“…/文件2/文件2.txt”。
相对路径里常使用 “…/” 来表示上一级目录
使用代码保存excel时
QString filepath = QFileDialog::getSaveFileName()各个参数的含义如图所示:
在进行excel交互之前,有必要了解excel对象。
尤其是使用QAxObject类导出表格时
在.cpp文件下编辑代码,可点击pushbutton按钮时导出下位机传输的数据文件,并且可选择文件保存的地方和修改文件的名称等。
代码如下(示例):
//保存数据Excel表格 void control::on_btnExport_clicked() //利用按钮的槽函数 { QString strPath; //定义路径为字符串 strPath = QFileDialog::getSaveFileName(this,"保存文件","G:","Excel File(*.xlsx)");//保存文件以Excel形式保存 if(strPath == "") { return ; } else { //uint8_t i,j; QXlsx::Document xlsx; //创建Excel文件 QXlsx::Document xlsxPara; QXlsx::Format Format1; //设置该单元的样式 QDateTime currenttime; //显示当前的时间 QString currenttimestring; QString QStrSheetName; //定义表格名称字符串QStrSheetName Format1.setHorizontalAlignment(QXlsx::Format::AlignHCenter);/*横向居中*/ Format1.setBorderStyle(QXlsx::Format::BorderDashDotDot);/*边框样式*/ Format1.setVerticalAlignment(QXlsx::Format::AlignVCenter);//横向居中 // Format1.setPatternBackgroundColor(QColor(218,238,243)); Format1.setFontSize(13); QXlsx::Format headFormat; //设置表头样式 headFormat.setPatternBackgroundColor(QColor(218,238,243)); //设置背景颜色 headFormat.setFontSize(13); //设置字体大小 headFormat.setHorizontalAlignment(QXlsx::Format::AlignHCenter); //横向居中 headFormat.setVerticalAlignment(QXlsx::Format::AlignVCenter); headFormat.setBorderStyle(QXlsx::Format::BorderDashDotDot);/*边框样式*/ //建立Sheet QStrSheetName = "FFT记录表"; //工作簿的名称 QStrSheetName += QString::number(1); xlsx.addSheet(QStrSheetName); //添加该命名的工作簿 //写入第一行,第一行是目录 xlsx.write(1,1,"时间(秒)",headFormat); //表格的第一行第一列显示时间(秒),表头 xlsx.setColumnWidth(1,15);//宽度15 xlsx.write(1,2,"J1",headFormat);//第一行第二列设置为J1,表头 xlsx.setColumnWidth(2,15); xlsx.write(2,1,"str"); //线程:保存Excel文件 bool b = xlsx.saveAs(strPath); } }
uchar rs[4]; rs[0]=rcvBuf[6]; rs[1]=rcvBuf[7]; rs[2]=rcvBuf[8]; rs[3]=rcvBuf[9]; float FF_No; memcpy_s(&FF_No,sizeof (float),rs,4); QString Str_No = QString::number(FF_No); ui->gas14->setPalette(palette); ui->gas14->setText(Str_No); this->ui->label_No->setText("正常运行"); ui->label_No->setStyleSheet("color:green"); ```cpp void MainWindow::on_bt_openfile_clicked() { //数据 QString str_CO2="123"; dataList_CO2.push_back(QList<QVariant>() <<Str_CO2); QString filepath = QFileDialog::getSaveFileName(this, QString::fromLocal8Bit("导出表格"), ".", tr("Excel File(*.xlsx)"));//获取保存路径 //"Excel File(*.xlsx)" if (!filepath.isEmpty()) { ui->savefilepath->setText(filepath); // QAxObject *excel = new QAxObject(this); excel->setControl("Excel.Application");//连接Excel控件 excel->dynamicCall("SetVisible (bool Visible)", "false");//不显示窗体 excel->setProperty("DisplayAlerts", false);//不显示任何警告信息。如果为true那么在关闭是会出现类似“文件已修改,是否保存”的提示 QAxObject *workbooks = excel->querySubObject("WorkBooks");//获取工作簿集合 workbooks->dynamicCall("Add");//新建一个工作簿 QAxObject *workbook = excel->querySubObject("ActiveWorkBook");//获取当前工作簿 QAxObject *worksheets = workbook->querySubObject("Sheets");//获取工作表集合 QAxObject *worksheet = worksheets->querySubObject("Item(int)", 1);//获取工作表集合的工作表1,即sheet1 //CO2的数值 QAxObject* user_titleCO2 = worksheet->querySubObject("Range(const QString&)", "A1");//写数据在表格的范围(A1:A列1行位置;D100:D列100行位置) QString M_CO2="CO2数值"; user_titleCO2->dynamicCall("SetValue(const QVariant&)", QVariant(M_CO2)); QAxObject* user_rangeCO2 = worksheet->querySubObject("Range(const QString&)", "A2:A200");//写数据在表格的范围(A1:A列1行位置;D100:D列100行位置) user_rangeCO2->dynamicCall("SetValue(const QVariant&)", QVariant(dataList_CO2)); workbook->dynamicCall("SaveAs(const QString&)", QDir::toNativeSeparators(filepath));//保存至filepath,注意一定要用QDir::toNativeSeparators将路径中的"/"转换为"\",不然一定保存不了。 workbook->dynamicCall("Close()");//关闭工作簿 excel->dynamicCall("Quit()");//关闭excel // delete excel; // excel = NULL; QMessageBox::information(this,"提示","导出数据成功!"); } }
以上就是直接生成Excel文件,以及通过Pushbutton按钮将生成Excel数据文件导出。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。