Qt从bin或者txt里读取数据并导入到excel里
代码如下
void MainWindow::OpenImg2()
{
QString fileName=NULL;
for (int i = 0; i < str_path_list.size(); i++)
{
QString str_path = str_path_list[i];
file_list.append(str_path);
}
foreach(QString name , file_list)
{
qDebug() << name;
QFile f(name);
if (!f.open(QIODevice::ReadOnly | QIODevice::Text))
{
qDebug()<< "Open failed." << endl;
}
QTextStream txtInput(&f);
int numK= 0;
int numK2=0;
QList<QVariant> allRowData,allRowData2,allRowData3,allRowData4;
while (!txtInput.atEnd())
{
numK++;//读取行数
QString d = QString::number(numK);
QStringList D;
D.append(d);
allRowData3.append(QVariant(D));//原始数据序号
QString lineStr;
QStringList linedata;
lineStr = txtInput.readLine(); //读取一行
lineStr.insert(17,"*").insert(20,":").insert(13,"/").insert(16,"/");
qDebug()<<lineStr;
//lineStr.replace("*","*'");
linedata = lineStr.split("*"); //根据空格来分成多个数据
allRowData.append(QVariant(linedata)); //保存所有行数据
QString first=linedata.at(0) ;
double m=first.toDouble();
threshold=ui->lineEdit->text();
thresholdValue=threshold.toDouble();
if(thresholdValue!=0&&m>thresholdValue)
{
numK2++;
allRowData2.append(QVariant(linedata));
QString s = QString::number(numK2);
QStringList S;
S.append(s);
allRowData4.append(QVariant(S));//报警数据序号
}
}
QAxWidget *excel = NULL; //一定要是QAxWidget 本例中,excel设定为Excel文件的操作对象
QAxObject *workbooks = NULL;
QAxObject *workbook = NULL; //Excel操作对象
excel = new QAxWidget("Excel.Application"); //连接Excel控件
excel->dynamicCall("SetVisible(bool)", false); //true 表示操作文件时可见,false表示为不可见
excel->setProperty("DisplayAlerts", false); //excel的对话弹窗关闭
workbooks = excel->querySubObject("WorkBooks"); //获取工作簿集合
fileName = name.remove(".txt") + ".xlsx";
fileName.replace("/", "\\");
workbooks->dynamicCall("Add");//新建一个工作簿
workbook = excel->querySubObject("ActiveWorkBook"); //获取当前工作簿
//如果有excel 就不用这一步创建了 //51是xlsx,csv是6;56表示创建的文件格式为xls
workbook->dynamicCall("SaveAs (const QString&,int,const QString&,const QString&,bool,bool)",
fileName, 51, QString(""), QString(""), false, false);
workbook = workbooks->querySubObject("Open(const QString &)", fileName); //打开
QAxObject * worksheets = workbook->querySubObject("WorkSheets"); // 获取打开的excel文件中所有的工作sheet
QAxObject * worksheet = worksheets->querySubObject("Item(int)", 1);//本例获取第一个,最后参数填
//获取单元格
QAxObject *cell=NULL;
QAxObject *cell2=NULL;
QAxObject *range=NULL;
QAxObject *range2=NULL;
/* QString asd = "A2:B" + QString::number(numK+1);
QString asd2 ="A2:B" + QString::number(numK2+1);*/
cell = worksheet->querySubObject("Cells(int, int)", 1, 1);
cell->dynamicCall("SetValue(const QVariant&)", QVariant("序号"));
cell = worksheet->querySubObject("Cells(int, int)", 1, 2);
cell->dynamicCall("SetValue(const QVariant&)", QVariant("测量值"));
cell = worksheet->querySubObject("Cells(int, int)", 1, 3);
cell->dynamicCall("SetValue(const QVariant&)", QVariant("日期"));
cell = worksheet->querySubObject("Cells(int, int)", 1, 4);
cell->dynamicCall("SetValue(const QVariant&)", QVariant("时间"));
range=worksheet->querySubObject("Range(const QString&)","C1:C1");
range->setProperty("ColumnWidth",14);
range = worksheet->querySubObject("Range(const QString)", "A2:A" + QString::number(numK+1));
range->dynamicCall("SetValue(const QVariant&)", QVariant(allRowData3));
range = worksheet->querySubObject("Range(const QString)", "B2:D" + QString::number(numK+1));
range->dynamicCall("SetValue(const QVariant&)", QVariant(allRowData));
worksheet->setProperty("Name","原始数据");
worksheets->querySubObject("Add(QVariant)", worksheet->asVariant());
QAxObject * worksheet2 = worksheets->querySubObject("Item(int)", 1);
cell2 = worksheet2->querySubObject("Cells(int, int)", 1, 1);
cell2->dynamicCall("SetValue(const QVariant&)", QVariant("序号"));
cell2 = worksheet2->querySubObject("Cells(int, int)", 1, 2);
cell2->dynamicCall("SetValue(const QVariant&)", QVariant("测量值"));
cell2 = worksheet2->querySubObject("Cells(int, int)", 1, 3);
cell2->dynamicCall("SetValue(const QVariant&)", QVariant("日期"));
cell2 = worksheet2->querySubObject("Cells(int, int)", 1, 4);
cell2->dynamicCall("SetValue(const QVariant&)", QVariant("时间"));
range2=worksheet2->querySubObject("Range(const QString&)","C1:C1");
range2->setProperty("ColumnWidth",14);
range2 = worksheet2->querySubObject("Range(const QString)", "A2:A" + QString::number(numK2+1));
range2->dynamicCall("SetValue(const QVariant&)", QVariant(allRowData4));
range2 = worksheet2->querySubObject("Range(const QString)", "B2:D" + QString::number(numK2+1));
range2->dynamicCall("SetValue(const QVariant&)", QVariant(allRowData2));
worksheet2->setProperty("Name","报警数据");
delete range;
delete range2;
workbook->dynamicCall("Save()");
workbook->dynamicCall("Close()");
excel->dynamicCall("Quit()");
if (excel)
{
delete excel;
excel = NULL;
}
}
QFile excelfile(fileName);
if (excelfile.exists())
{
QDesktopServices::openUrl(QUrl::fromLocalFile(fileName));
}
}
//鼠标触碰散列点显示
void MainWindow::slotPointHoverd(const QPointF &point, bool state)
{
if (state) {
m_valueLabel->setText(QString::asprintf("%.3f\n",point.y())+axisX2[int(point.x())]);
QPoint curPos = mapFromGlobal(QCursor::pos());
m_valueLabel->move(curPos.x() - m_valueLabel->width() / 2, curPos.y() - m_valueLabel->height());//移动数值
m_valueLabel->show();//显示出来
}
else{
m_valueLabel->hide();//进行
}
}
本文含有隐藏内容,请 开通VIP 后查看