找回密码
 立即注册
收起左侧

Qxlsx保存excel如何删除已存在的excel或者更新覆盖已有的excel...

4
回复
10093
查看
[复制链接]
累计签到:1 天
连续签到:1 天
来源: 2018-3-23 11:26:24 显示全部楼层 |阅读模式
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实现我后面需要解决的这两个问题。






回复

使用道具 举报

累计签到:742 天
连续签到:1 天
2018-3-23 14:44:54 显示全部楼层
为什么我编译出来的库里面没有  QXlsx:: Document  这个类啊,源代码里面也没有呀 !跪求 库的链接 ~
回复

使用道具 举报

累计签到:1 天
连续签到:1 天
2018-3-23 15:19:35 显示全部楼层
Since 发表于 2018-3-23 14:44
为什么我编译出来的库里面没有  QXlsx:: Document  这个类啊,源代码里面也没有呀 !跪求 库的链接 ~
...

需要下载,给你个博客地址,你按照操作就可以了
回复

使用道具 举报

累计签到:1 天
连续签到:1 天
2018-3-23 15:20:31 显示全部楼层
xiaoliping1945 发表于 2018-3-23 15:19
需要下载,给你个博客地址,你按照操作就可以了

http://blog.csdn.net/yajlv/article/details/52927462
1.下载:ActivePerl-5.22.4.2205-MSWin32-x86-64int-403863
  进行安装
2.下载:QtXlsxWriter-master
3.进行编译,将编译得到的 include  lib  meckes  复制到安装目录对应的文件夹下
然后 工程的.pro里添加,QT += xlsx   头文件需要添加:  #include <Qtxlsx>

点评

有劳~  详情 回复 发表于 2018-4-3 09:02
回复

使用道具 举报

累计签到:742 天
连续签到:1 天
2018-4-3 09:02:17 显示全部楼层
xiaoliping1945 发表于 2018-3-23 15:20
http://blog.csdn.net/yajlv/article/details/52927462
1.下载:ActivePerl-5.22.4.2205-MSWin32-x86-64i ...

有劳~                                                                  
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

公告
可以关注我们的微信公众号yafeilinux_friends获取最新动态,或者加入QQ会员群进行交流:190741849、186601429(已满) 我知道了