|
1Qter豆
大神们大家好,有个问题请教:使用插件Qxlsx 将Qtablewiget导出excel,存在以下两个问题:1.导出名称为1-1,第一次导出时,可以正常导出(假如导出10行),第二次导出时,文件不能正常打开,提示需要修复, 2.第二次导出后,会覆盖第一次的,如果导出5行,那么后5行还是第一次导出的数据, 请问: 如何做到,第二次导出时,删除同名称的excel,然后再生成,或者将存在的同名的excel进行清空再写入?
源码如下:
// QString FileName = QFileDialog::getSaveFileName(this, tr("Save as..."), QString(), tr("Excel Files(*.xlsx);;Excel Files(*.xls)")); QString FileName=QString("%1-%2.xlsx").arg(QString::number(Edit_Type[bb]->text().toInt())).arg(QString::number(Edit_ID[bb]->text().toInt())); QXlsx::Document xlsx(FileName);/*打开一个book1的文件*/ QXlsx::Format format1;/*设置该单元的样式*/ format1.setFontColor(QColor(Qt::black));/*文字为红色*/ //format1.setPatternBackgroundColor(QColor(152,251,152));/*北京颜色*/ format1.setFontSize(18); /*设置字体大小*/ format1.setHorizontalAlignment(QXlsx::Format::AlignHCenter); /*横向居中*/ // format1.setBorderStyle(QXlsx::Format::BorderDashDotDot); /*边框样式*/ xlsx.mergeCells("A11"); QString name=QString("数据记录:")+QString("设备编号=%1,ID=%2").arg(QString::number(Edit_Type[bb]->text().toInt())).arg(QString::number(Edit_ID[bb]->text().toInt())); xlsx.write(1, 1,name,format1);
// xlsx.write(2, 1, 12345, format1);/*写入文字,应该刚才设置的样式*/ int row_count=Text_edit[bb]->rowCount(); int row_coloum=Text_edit[bb]->columnCount();
qDebug()<<"row_count"; qDebug()<<row_count; qDebug()<<"row_coloum"; qDebug()<<row_coloum;
xlsx.write(2, 1,"设备名称"); xlsx.write(2, 2,"设备类型编号"); xlsx.write(2, 3,"设备ID号"); xlsx.write(2, 4,"设备MAC"); xlsx.write(2, 5,"信号强度"); xlsx.write(2, 6,"电池电压"); xlsx.write(2, 7,"数据1"); xlsx.write(2, 8,"数据2"); xlsx.write(2, 9,"数据3"); xlsx.write(2, 10,"数据4"); xlsx.write(2, 11,"数据5"); xlsx.write(2, 12,"记录时间"); xlsx.setColumnWidth(1,20); xlsx.setColumnWidth(2,15); xlsx.setColumnWidth(3,15); xlsx.setColumnWidth(4,15); xlsx.setColumnWidth(5,15); xlsx.setColumnWidth(6,15); xlsx.setColumnWidth(7,14); xlsx.setColumnWidth(8,14); xlsx.setColumnWidth(9,14); xlsx.setColumnWidth(10,14); xlsx.setColumnWidth(11,14); xlsx.setColumnWidth(12,25); int i,j; qDebug()<<"bb"; qDebug()<<bb; //xlsx.write('K1', 11,row_count);//写入记录条数 for ( i=0; i<row_count; i++) { for(j=0;j<row_coloum;j++) xlsx.write(i+3, j+1,Text_edit[bb]->item(i,j)->text());
} xlsx.saveAs(FileName);/*保存*/
效果如下:1.第一次导出:
第二次导出时,从新打开excel,会报错:
2. 第二次导出的数据,覆盖在第一次,第一次多余的行没有自动清除掉,如下:
3.我需要解决的问题:
1.在我重复导出相同文件名的excel时,
1)要么删除原有存在的,再保存;
2)或者,将存在同名的进行替换(也就是需要清空存在同名的excel);
如何解决上面重复保存报错的问题?以及如何使用QXLSX实现我后面需要解决的这两个问题。
|
|