Qtableview到excel

lixang001 2016-08-08 06:52:41
Qtableview到excel

name age =》excel
aa 10 乱码 10
bb 15 乱码 15

英文字母aa bb也乱码
汉字也乱码求助!

int ExportExcelObject::export2Excel()
{
if(fieldList.size() <= 0)
{
qDebug() << "ExportExcelObject::export2Excel failed: No fields defined.";
return -1;
}

QSqlDatabase db = QSqlDatabase::addDatabase("QODBC", "excelexport");
if(!db.isValid())
{
qDebug() << "ExportExcelObject::export2Excel failed: QODBC not supported.";
return -2;
}
// set the dsn string
QString dsn = QString("DRIVER={Microsoft Excel Driver (*.xls)};DSN='';FIRSTROWHASNAMES=1;READONLY=FALSE;CREATE_DB=\"%1\";DBQ=%2").
arg(excelFilePath).arg(excelFilePath);
db.setDatabaseName(dsn);
if(!db.open())
{
qDebug() << "ExportExcelObject::export2Excel failed: Create Excel file failed by DRIVER={Microsoft Excel Driver (*.xls)}.";
//QSqlDatabase::removeDatabase("excelexport");
return -3;
}

QSqlQuery query(db);

//drop the table if it's already exists
QString s, sSql = QString("DROP TABLE [%1] (").arg(sheetName);
//"DROP TABLE {myDats] ("
query.exec(sSql);

//create the table (sheet in Excel file)
sSql = QString("CREATE TABLE [%1] (").arg(sheetName);
for (int i = 0; i < fieldList.size(); i++)
{
s = QString("[%1] %2").arg(fieldList.at(i)->sFieldName).arg(fieldList.at(i)->sFieldType);
sSql += s;
if(i < fieldList.size() - 1)
sSql += " , ";
}

sSql += ")";
query.prepare(sSql);

if(!query.exec())
{
qDebug() << "ExportExcelObject::export2Excel failed: Create Excel sheet failed.";
//db.close();
//QSqlDatabase::removeDatabase("excelexport");
return -4;
}

//add all rows
sSql = QString("INSERT INTO [%1] (").arg(sheetName);
for (int i = 0; i < fieldList.size(); i++)
{
sSql += fieldList.at(i)->sFieldName;
if(i < fieldList.size() - 1)
sSql += " , ";
}
sSql += ") VALUES (";
for (int i = 0; i < fieldList.size(); i++)
{
sSql += QString(":data%1").arg(i);
if(i < fieldList.size() - 1)
sSql += " , ";
}
sSql += ")";

//"INSERT INTO [myData](colum2,colum3) VALUES(:data0,:data1)"
qDebug() << sSql;

int r, iRet = 0;
for(r = 0 ; r < tableView->model()->rowCount() ; r++)
{
query.prepare(sSql);
for (int c = 0; c < fieldList.size(); c++)
{
query.bindValue(QString(":data%1").arg(c), tableView->model()->data(tableView->model()->index(r, fieldList.at(c)->iCol)));
// query.bindValue(tableView->model()->data(tableView->model()->index(r, fieldList.at(c)->iCol)));
}

if(query.exec())
iRet++;

if(r % 10 == 0)
emit exportedRowCount(r);
}

emit exportedRowCount(r);

return iRet;




//=============================================================


}
...全文
164 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
feiyangqingyun 2016-08-09
  • 打赏
  • 举报
回复
可参见我的框架中的导出数据到excel,10万行8字段只要3秒钟! http://www.qtcn.org/bbs/read-htm-tid-61077.html
lixang001 2016-08-09
  • 打赏
  • 举报
回复
你的代码太复杂了!我看过了但不会用!非常感谢 求导出excel不乱码

16,216

社区成员

发帖
与我相关
我的任务
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
  • Qt
  • 亭台六七座
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧