1. 使用QTextStream输出流导出.txt文件
QString strFilePath = "C:/test.txt";
QFile file(strFilePath);
if (!file.open(QIODevice::WriteOnly | QIODevice::Text)) {
QMessageBox::information(NULL, tr("提示信息:"), 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(NULL, tr("提示信息:"), 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(NULL, tr("提示信息:"), 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");
QAxObject* excelWorkBooks = excelApp.querySubObject("Workbooks");
QAxObject* excelWorkBook;
QAxObject* excelWorkSheets;
QAxObject* excelWorkSheet;
//
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");
QAxObject* excelSheetTab = excelWorkSheet->querySubObject("Tab");
excelSheetTab->setProperty("ColorIndex", 4);
QAxObject* excelSheetRange;
QAxObject* excelSheetInterior;
QAxObject* excelSheetFont;
//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(NULL, tr("提示信息:"), tr("打开.pdf文件失败!"));
return;
}
//第一页
QString strPrint = QString("1 2013-1-25 12:00:00 %1 wuhan").arg(tr("武汉"));
QPoint point(10, 10);
painter.drawText(point, strPrint);
strPrint.clear();
strPrint = QString("2 2013-1-25 12:00:00 %1 guanzhou").arg(tr("广州"));
point.setY(30);
painter.drawText(point, strPrint);
strPrint.clear();
strPrint = QString("3 2013-1-25 12:00:00 %1 shenzhen").arg(tr("深圳"));
point.setY(50);
painter.drawText(point, strPrint);
//第二页
printer.newPage();
strPrint = QString("1 2013-1-25 12:00:00 %1 wuhan").arg(tr("武汉"));
point.setY(10);
painter.drawText(point, strPrint);
strPrint.clear();
strPrint = QString("2 2013-1-25 12:00:00 %1 guanzhou").arg(tr("广州"));
point.setY(50);
painter.drawText(point, strPrint);
strPrint.clear();
strPrint = QString("3 2013-1-25 12:00:00 %1 shenzhen").arg(tr("深圳"));
point.setY(90);
painter.drawText(point, strPrint);
painter.end();