快要赶不上生活本身的温柔和可爱了。
提示:本文是作者学习的记录,若有错误指出,作者虚心请教。
文章目录
一、 设置编码
一般程序按照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
}
二、生成Excel文件步骤
1.添加开发工具
需要在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查看是否安装成功
2.添加命令行
首先要生成Excel文件的话,需要在Pro文件上添加
QT+=xlsx
3.添加库文件
在.h头文件里添加
#include <QtXlsx>
在.cpp文件里添加
#include <QtWidgets/QApplication>
#include <QtXlsx/QtXlsx>
.......
QXlsx::Document xlsx;
xlsx.write("A1", "Hello Qt!");
xlsx.saveAs("Test.xlsx");
.......
4.运行程序
可在debug/ /Release目录下生成excel文件
三、保存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交互之前,有必要了解excel对象。
尤其是使用QAxObject类导出表格时
五、导出Excel数据文件
在.cpp文件下编辑代码,可点击pushbutton按钮时导出下位机传输的数据文件,并且可选择文件保存的地方和修改文件的名称等。
代码如下(示例):
1.方法一:
//保存数据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);
}
}
2.方法二:
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数据文件导出。