• 7873阅读
  • 7回复

将数据导出生成.excel文件 [复制链接]

上一主题 下一主题
离线eagle
 
只看楼主 倒序阅读 楼主  发表于: 2011-08-23
我想问如何将界面中tableView中的数据导出生成.excel文件,或者将从数据库中查询到得结果导出生成.excel文件也行,不要生成CSV文件再该成.excel文件的。谢谢!
离线redcoco
只看该作者 1楼 发表于: 2011-08-23
关注一下
离线XChinux

只看该作者 2楼 发表于: 2011-08-23
一、使用ActiveQt来调用Excel接口生成Excel
二、输出XML格式的Excel文件(Excel 2003的XML格式)
二笔 openSUSE Vim N9 BB10 XChinux@163.com 网易博客 腾讯微博
承接C++/Qt、Qt UI界面、PHP及预算报销系统开发业务
离线eagle
只看该作者 3楼 发表于: 2011-09-07
解决了,谢谢
离线jgcddd

只看该作者 4楼 发表于: 2011-09-09
如何解决的?楼主说一下,,我现在做的是如何将QtableWight中的数据导出来。。。
新手,,不懂,,,
能说的细点吗?
离线eagle
只看该作者 5楼 发表于: 2011-09-15
回 4楼(jgcddd) 的帖子
void dataExport::dataExport_slots()
{
    QSqlQueryModel *model = new QSqlQueryModel;
    QString sql_count ="select count(*) from infor1";
    model->setQuery(sql_count);
    QSqlRecord rec = model->record(0);
    int count = rec.value(0).toInt();
    //qDebug()<<count;

    QString sql="select * from infor1";
    model->setQuery(sql);
//----------------------------------打开excel--------------------------------------
    QAxWidget excel("Excel.Application");
    excel.setProperty("Visible", true);
    QAxObject * workbooks = excel.querySubObject("WorkBooks");
    //获取excel的绝对路径
    QString path = QCoreApplication::applicationDirPath();
    QString table = "/Data/***.xls";
    path = path+table;
    //qDebug()<<path;
    workbooks->dynamicCall("Open (const QString&)", QString(path));

    QAxObject * workbook = excel.querySubObject("ActiveWorkBook");
    QAxObject * sheets = workbook->querySubObject("WorkSheets");

    //删除原先的Sheet;
    QAxObject * a = sheets->querySubObject("Item(const QString&)", QVariant("Sheet1"));
    a->dynamicCall("delete");

    //新建一个Sheet;
    sheets->querySubObject("Add()");
    QAxObject * b = sheets->querySubObject("Item(int)", 1);
    b->setProperty("Name", QVariant("Sheet1"));

    QAxObject *sheet = sheets->querySubObject( "Item(const QVariant&)", QVariant("Sheet1") );
//----------------------------------写数据------------------------------------------
    for(int i=1; i<(count+1); i++)
    {
        QSqlRecord record = model->record(i-1);
        for(int j=1; j<5; j++)
        {
            QAxObject *range = sheet->querySubObject("Cells(int,int)", i, j);
            range->dynamicCall("SetValue(const QString&)", record.value(j-1).toString());
        }
    }
}

我是先将数据写入到数据库,然后再导出的,希望能帮到你
离线jgcddd

只看该作者 6楼 发表于: 2011-09-22
谢谢了楼主。。。
离线xuyinghua
只看该作者 7楼 发表于: 2011-11-17
为什么我用你这个会弹出 “该内存不能为 read,应用程序错误”这个玩意啊
看到请联系下我,QQ350288921
非常感谢
快速回复
限100 字节
 
上一个 下一个