Qt中导出.txt, .xls, .xlsx, .pdf文件小结

来源:互联网 发布:加华伟业资本 知乎 编辑:程序博客网 时间:2024/05/16 05:18

1. 使用QTextStream输出流导出.txt文件

QString strFilePath = "C:/test.txt";

QFile file(strFilePath);

if (!file.open(QIODevice::WriteOnly | QIODevice::Text)) {

QMessageBox::information(NULLtr("提示信息:"), tr("文件打开失败!"));

return;

}

QTextStream out(&file);

out<<"1"<<"\t"<<"2013-1-25 12:00:00"<<"\t"<<tr("武汉")<<"\t"<<"wuhan"<<endl

<<"2"<<"\t"<<"2013-1-25 12:00:00"<<"\t"<<tr("广州")<<"\t"<<"guangzhou"<<endl

<<"3"<<"\t"<<"2013-1-25 12:00:00"<<"\t"<<tr("深圳")<<"\t"<<"shenzhen"<<endl;

file.close();

2. 使用DSN连接Excel表格处理导出.xls文件 (但是.xlsx文件写不进)

QString strFilePath = "C:/test.xls";

{

QSqlDatabase db = QSqlDatabase::addDatabase("QODBC""excelexport");

if (!db.isValid()) {

QMessageBox::information(NULLtr("提示信息:"), tr("连接ODBC驱动失败"));

return;

}

QString dsn = QString("DRIVER={Microsoft Excel Driver (*.xls)};DSN='';FIRSTROWHASNAMES=1;READONLY=FALSE;CREATE_DB=\"%1\";DBQ=%2")

.arg(strFilePath).arg(strFilePath);

db.setDatabaseName(dsn);

if (!db.open()) {

QMessageBox::information(NULLtr("提示信息:"), tr("打开Excel表格失败!"));

return;

}

QSqlQuery query(db);

QString strSql = QString("DROP TABLE mydata");

query.exec(strSql);

strSql.clear();

strSql = QString("CREATE TABLE mydata (id number, dt date, addr char(60), name char(60))");

query.exec(strSql);

strSql.clear();

strSql = QString("INSERT INTO mydata (id, dt, addr, name) VALUES (1, '2013-1-25 12:00:00''%1', 'wuhan')").arg(tr("武汉"));

query.exec(strSql);

strSql.clear();

strSql = QString("INSERT INTO mydata (id, dt, addr, name) VALUES (2, '2013-1-25 12:00:00''%1', 'guangzhou')").arg(tr("广州"));

query.exec(strSql);

strSql.clear();

strSql = QString("INSERT INTO mydata (id, dt, addr, name) VALUES (3, '2013-1-25 12:00:00''%1', 'shenzhen')").arg(tr("深圳"));

query.exec(strSql);

db.close();

}

QSqlDatabase::removeDatabase("excelexport");

3. 直接对Excel文件做VBA编程导出.xlsx文件 (同样.xls文件也可以)

QString strFilePath = "C:/test.xlsx";

strFilePath = strFilePath.replace("/""\\");//路径需要\反斜杠

//QAxWidget excelApp("Excel.Application");//也可以

QAxObject excelApp("Excel.Application");

QAxObjectexcelWorkBooks = excelApp.querySubObject("Workbooks");

QAxObjectexcelWorkBook;

QAxObjectexcelWorkSheets;

QAxObjectexcelWorkSheet;

//

if (excelWorkBooks) {

QFile file(strFilePath);

if (file.exists()) {

excelWorkBook = excelWorkBooks->querySubObject("Open(const QString&)"strFilePath);

else {

excelWorkBook = excelWorkBooks->querySubObject("Add()");

}

if (excelWorkBook) {

excelWorkSheets = excelWorkBook->querySubObject("Sheets");

else {

QMessageBox::information(0, tr("提示信息:"), tr("QAxObject workbook 初始化失败!"));

}

else {

QMessageBox::information(0, tr("提示信息:"), tr("初始化Excel错误,可能没有安装Office组件!"));

}

excelWorkSheet = excelWorkSheets->querySubObject("Item(int index)", 1);

excelWorkSheet->setProperty("Name""mydata");

QAxObjectexcelSheetTab = excelWorkSheet->querySubObject("Tab");

excelSheetTab->setProperty("ColorIndex", 4);

QAxObjectexcelSheetRange;

QAxObjectexcelSheetInterior;

QAxObjectexcelSheetFont;

//1, 2013-1-25 12:00:00, 武汉, wuhan

excelSheetRange = excelWorkSheet->querySubObject("Cells(1, 1)");

excelSheetRange->dynamicCall("SetValue(const QVariant&)"QVariant(1));

excelSheetRange->setProperty("HorizontalAlignment", 1);

excelSheetRange->setProperty("ColumnWidth", 10);

excelSheetRange->setProperty("RowHeight", 40);

excelSheetInterior = excelSheetRange->querySubObject("Interior");

excelSheetInterior->setProperty("ColorIndex"QVariant(3));

excelSheetFont = excelSheetRange->querySubObject("Font");

excelSheetFont->setProperty("Bold"true);

excelSheetRange = excelWorkSheet->querySubObject("Cells(1, 2)");

excelSheetRange->dynamicCall("SetValue(const QVariant&)"QVariant("2013-1-25 12:00:00"));

excelSheetRange->setProperty("NumberFormatLocal""yyyy-mm-dd hh:mm:ss;@");

excelSheetRange->setProperty("HorizontalAlignment", 2);

excelSheetRange->setProperty("ColumnWidth", 30);

excelSheetInterior = excelSheetRange->querySubObject("Interior");

excelSheetInterior->setProperty("ColorIndex"QVariant(4));

excelSheetFont = excelSheetRange->querySubObject("Font");

excelSheetFont->setProperty("Italic"true);

excelSheetRange = excelWorkSheet->querySubObject("Cells(1, 3)");

excelSheetRange->dynamicCall("SetValue(const QVariant&)"QVariant(tr("武汉")));

excelSheetRange->setProperty("HorizontalAlignment", 3);

excelSheetRange->setProperty("ColumnWidth", 20);

excelSheetInterior = excelSheetRange->querySubObject("Interior");

excelSheetInterior->setProperty("ColorIndex"QVariant(5));

excelSheetFont = excelSheetRange->querySubObject("Font");

excelSheetFont->setProperty("Name""Verdana");

excelSheetRange = excelWorkSheet->querySubObject("Cells(1, 4)");

excelSheetRange->dynamicCall("SetValue(const QVariant&)"QVariant("wuhan"));

excelSheetRange->setProperty("HorizontalAlignment", 4);

excelSheetRange->setProperty("ColumnWidth", 30);

excelSheetInterior = excelSheetRange->querySubObject("Interior");

excelSheetInterior->setProperty("ColorIndex"QVariant(6));

excelSheetFont = excelSheetRange->querySubObject("Font");

excelSheetFont->setProperty("ColorIndex"QVariant(7));

//2, 2013-1-25 12:00:00, 广州, guangzhou

excelSheetRange = excelWorkSheet->querySubObject("Cells(2, 1)");

excelSheetRange->dynamicCall("SetValue(const QVariant&)"QVariant(2));

excelSheetRange->setProperty("HorizontalAlignment", 1);

excelSheetRange->setProperty("RowHeight", 40);

excelSheetInterior = excelSheetRange->querySubObject("Interior");

excelSheetInterior->setProperty("ColorIndex"QVariant(3));

excelSheetFont = excelSheetRange->querySubObject("Font");

excelSheetFont->setProperty("Bold"true);

excelSheetRange = excelWorkSheet->querySubObject("Cells(2, 2)");

excelSheetRange->dynamicCall("SetValue(const QVariant&)"QVariant("2013-1-25 12:00:00"));

excelSheetRange->setProperty("NumberFormatLocal""yyyy-mm-dd hh:mm:ss;@");

excelSheetRange->setProperty("HorizontalAlignment", 2);

excelSheetInterior = excelSheetRange->querySubObject("Interior");

excelSheetInterior->setProperty("ColorIndex"QVariant(4));

excelSheetFont = excelSheetRange->querySubObject("Font");

excelSheetFont->setProperty("Italic"true);

excelSheetRange = excelWorkSheet->querySubObject("Cells(2, 3)");

excelSheetRange->dynamicCall("SetValue(const QVariant&)"QVariant(tr("广州")));

excelSheetRange->setProperty("HorizontalAlignment", 3);

excelSheetInterior = excelSheetRange->querySubObject("Interior");

excelSheetInterior->setProperty("ColorIndex"QVariant(5));

excelSheetFont = excelSheetRange->querySubObject("Font");

excelSheetFont->setProperty("Name""Verdana");

excelSheetRange = excelWorkSheet->querySubObject("Cells(2, 4)");

excelSheetRange->dynamicCall("SetValue(const QVariant&)"QVariant("guangzhou"));

excelSheetRange->setProperty("HorizontalAlignment", 4);

excelSheetInterior = excelSheetRange->querySubObject("Interior");

excelSheetInterior->setProperty("ColorIndex"QVariant(6));

excelSheetFont = excelSheetRange->querySubObject("Font");

excelSheetFont->setProperty("ColorIndex"QVariant(7));

//3, 2013-1-25 12:00:00, 深圳, shenzhen

excelSheetRange = excelWorkSheet->querySubObject("Cells(3, 1)");

excelSheetRange->dynamicCall("SetValue(const QVariant&)"QVariant(3));

excelSheetRange->setProperty("HorizontalAlignment", 1);

excelSheetRange->setProperty("RowHeight", 40);

excelSheetInterior = excelSheetRange->querySubObject("Interior");

excelSheetInterior->setProperty("ColorIndex"QVariant(3));

excelSheetFont = excelSheetRange->querySubObject("Font");

excelSheetFont->setProperty("Bold"true);

excelSheetRange = excelWorkSheet->querySubObject("Cells(3, 2)");

excelSheetRange->dynamicCall("SetValue(const QVariant&)"QVariant("2013-1-25 12:00:00"));

excelSheetRange->setProperty("NumberFormatLocal""yyyy-mm-dd hh:mm:ss;@");

excelSheetRange->setProperty("HorizontalAlignment", 2);

excelSheetInterior = excelSheetRange->querySubObject("Interior");

excelSheetInterior->setProperty("ColorIndex"QVariant(4));

excelSheetFont = excelSheetRange->querySubObject("Font");

excelSheetFont->setProperty("Italic"true);

excelSheetRange = excelWorkSheet->querySubObject("Cells(3, 3)");

excelSheetRange->dynamicCall("SetValue(const QVariant&)"QVariant(tr("深圳")));

excelSheetRange->setProperty("HorizontalAlignment", 3);

excelSheetInterior = excelSheetRange->querySubObject("Interior");

excelSheetInterior->setProperty("ColorIndex"QVariant(5));

excelSheetFont = excelSheetRange->querySubObject("Font");

excelSheetFont->setProperty("Name""Verdana");

excelSheetRange = excelWorkSheet->querySubObject("Cells(3, 4)");

excelSheetRange->dynamicCall("SetValue(const QVariant&)"QVariant("shenzhen"));

excelSheetRange->setProperty("HorizontalAlignment", 4);

excelSheetInterior = excelSheetRange->querySubObject("Interior");

excelSheetInterior->setProperty("ColorIndex"QVariant(6));

excelSheetFont = excelSheetRange->querySubObject("Font");

excelSheetFont->setProperty("ColorIndex"QVariant(7));

//

excelApp.setProperty("DisplayAlerts", 0);

excelWorkBook->dynamicCall("SaveAs(const QString&)"strFilePath);

excelWorkBook->dynamicCall("Close(Boolean)"false);

excelApp.dynamicCall("Quit()");

4. 使用QPrinter导出.pdf文件

QString strFilePath = "C:/test.pdf";

QPrinter printer;

printer.setOutputFormat(QPrinter::PdfFormat);

printer.setOutputFileName(strFilePath);

QPainter painter;

if (!painter.begin(&printer)) {

QMessageBox::information(NULLtr("提示信息:"), tr("打开.pdf文件失败!"));

return;

}

//第一页

QString strPrint = QString("1   2013-1-25 12:00:00   %1   wuhan").arg(tr("武汉"));

QPoint point(10, 10);

painter.drawText(pointstrPrint);

strPrint.clear();

strPrint = QString("2   2013-1-25 12:00:00   %1   guanzhou").arg(tr("广州"));

point.setY(30);

painter.drawText(pointstrPrint);

strPrint.clear();

strPrint = QString("3   2013-1-25 12:00:00   %1   shenzhen").arg(tr("深圳"));

point.setY(50);

painter.drawText(pointstrPrint);

//第二页

printer.newPage();

strPrint = QString("1   2013-1-25 12:00:00   %1   wuhan").arg(tr("武汉"));

point.setY(10);

painter.drawText(pointstrPrint);

strPrint.clear();

strPrint = QString("2   2013-1-25 12:00:00   %1   guanzhou").arg(tr("广州"));

point.setY(50);

painter.drawText(pointstrPrint);

strPrint.clear();

strPrint = QString("3   2013-1-25 12:00:00   %1   shenzhen").arg(tr("深圳"));

point.setY(90);

painter.drawText(pointstrPrint);

painter.end();

原创粉丝点击