乔山办公网我们一直在努力
您的位置:乔山办公网 > excel表格制作 > 关于qt与<em>excel</em>-qt5 excel,qt5解析excel

关于qt与<em>excel</em>-qt5 excel,qt5解析excel

作者:乔山办公网日期:

返回目录:excel表格制作


首先,e68a84e8a2ad7a686964616f331我们打开前文所设置的工程项目。

然后,我们在界面设计窗口,加入一个label用于显示,要保存的目录。注意设置下相应的界面布局。

然后,我们在mainwindow.h类中创建一个newExcel的函数,用于实现新建excel的功能。

在对应的cpp文件中,我们要实现newExcel函数功能,首先,按前文的步骤,将application,workbook,worksheet进行赋值并设置。
其中,pApplication->setControl("Excel.Application");用于连接excel控件。pWorkBooks = pApplication->querySubObject("Workbooks");获取workbooks指针。

之后,我们需要用QFile先判断下是否已经存在同名文件,如果没有,我们通过操作excel组件进行创建。file.exist()是判断文件是否存在。如果不存在,我们新建一个excel,然后获取活动的workbook。然后通过dynamicCall调用SaveAs函数进行保存。

然后在构造函数中调用newExcel,我们可以创建一个名字为fileName的excel文件了。

程序运行以后,会弹出保存文件的对话框,在其中选择要保存的excel文件名,点击保存之后,会在你选择的路径中创建一个excel文件。

但是,当我们准备删除此文件的时候,会无法完成,这是因为,我们程序中使用pApplication操作excel的函数并没有关闭。

9
我们可以在源文件中添加以下代码关闭调用。这样就可以删除了。

QSqlDatabase db = QSqlDatabase::addDatabase("QODBC");
if(!db.isValid())
{
qDebug() << "export2Excel failed: QODBC not supported.";
return ;
}
QString xlsFile = "D:/test.xls";
QString dsn = QString("DRIVER={Microsoft Excel Driver (*.xls)};Readonly=0;DriverId=790;DBQ=%1").arg(xlsFile);
db.setDatabaseName(dsn);
if(!db.open())
{
//错误处理
return;
}
QString queryystr = "select * from [sheet1$]";
SqlTableModel*excelTableModel = new SqlTableModel(this, db);
QString tableName = "[sheet1$]";
excelTableModel->setTable(tableName);
QSqlQuery querry(queryystr, db);
excelTableModel->setQuery(querry);
excelTableModel->setEditStrategy(QSqlTableModel::OnManualSubmit);
excelTableModel->setSort(0, Qt::AscendingOrder);
bool ok = excelTableModel->select(); //选取整个表e799bee5baa6e997aee7ad94e4b893e5b19e366的所有行

ui.tableView_2->setModel(excelTableModel);
int i = 0;
foreach(QString heardName, heardList)
{
excelTableModel->setHeaderData(i, Qt::Horizontal, heardName);
i++;
}
int sqlTableCount = m_sqlTableModel->rowCount();
int excelTableCount = excelTableModel->rowCount();
QList<QSqlRecord> tmprecord;
for (int row = 0; row < excelTableCount; row++ )
{
QSqlRecord excelRecord = excelTableModel->record(row);
tmprecord << excelRecord;
}

db.close();
bool open = m_dba.open();

foreach(QSqlRecord record, tmprecord)
{
bool ok = m_sqlTableModel->insertRow(sqlTableCount); //添加一行
for (int k = 0; k<5;k++)
{
if (k == 0)
{
bool suc= m_sqlTableModel->setData(m_sqlTableModel->index(sqlTableCount,k),record.value(k), Qt::CheckStateRole);
}
bool suc= m_sqlTableModel->setData(m_sqlTableModel->index(sqlTableCount,k),record.value(k), Qt::EditRole);
}
sqlTableCount++;
}
AlterButtonClicked();

initWindow(TEACHERMANAGECLICKED);
AlterButtonClicked()
{
m_sqlTableModel->database().transaction(); //开始事务操作
if (m_sqlTableModel->submitAll())
{
m_sqlTableModel->database().commit(); //提交
}
else
{
m_sqlTableModel->database().rollback(); //回滚
QMessageBox::warning(this, tr("Model"), tr("数据库错误: %1").arg(m_sqlTableModel->lastError().text()));
}
}

initWindow(int index)
{
int i = 0;
heardList.clear();
if (index == STUDENTMANAGECLICKED)
{
heardList << "选择" << "编号" << "姓名" << "性别" << "班级" << "备注";

m_sqlTableModel->setTable("\"StudentInfo\"");
m_sqlTableModel->setEditStrategy(QSqlTableModel::OnManualSubmit);
m_sqlTableModel->setSort(0, Qt::AscendingOrder);
m_sqlTableModel->select(); //选取整个表的所有行
ui.tableView_2->setModel(m_sqlTableModel);
foreach(QString heardName, heardList)
{
m_sqlTableModel->setHeaderData(i, Qt::Horizontal, heardName);
i++;
}
}
else if (index == TEACHERMANAGECLICKED)
{
heardList << "选择" << "用户名" << "姓名" << "性别" << "角色" << "备注";
m_sqlTableModel->setTable("\"TeacherInfo\"");
m_sqlTableModel->setEditStrategy(QSqlTableModel::OnManualSubmit);
m_sqlTableModel->setSort(0, Qt::AscendingOrder);
bool ok1 = m_sqlTableModel->select(); //选取整个表的所有行
ui.tableView_2->setModel(m_sqlTableModel);

foreach(QString heardName, heardList)
{
m_sqlTableModel->setHeaderData(i, Qt::Horizontal, heardName);
i++;
}
}
//m_sqlTableModel->insertColumn(0);

ui.tableView_2->resizeColumnsToContents();

}

如果设置后台启动报错的话,那提供一种无奈之选,就是,设置窗口可见,然后

excel->setProperty("WindowState", "xlMinimized");

将窗口最小化,将就一下



1、显示当前窗口7a686964616fe59b9ee7ad94333
excel.setProperty("Visible", true);
2、更改 Excel 标题栏:
excel.setProperty("Caption", "Invoke Microsoft Excel");
3、添加新工作簿:
QAxObject * workbooks = excel.querySubObject("WorkBooks");
workbooks->dynamicCall("Add");
4、打开已存在的工作簿:
workbooks->dynamicCall("Open (const QString&)", QString("c:/test.xls"));
5、获取活动工作簿:
QAxObject * workbook = excel.querySubObject("ActiveWorkBook");
6、获取所有的工作表:
QAxObject * worksheets = workbook->querySubObject("WorkSheets");
7、获取工作表数量:
int intCount = worksheets->property("Count").toInt();
8、获取第一个工作表:
QAxObject * worksheet = workbook->querySubObject("Worksheets(int)", 1);
9、获取cell的值:
QAxObject * range = worksheet->querySubObject("Cells(int,int)", 1, 1 );

相关阅读

  • 关于qt与<em>excel</em>-qt5 excel,qt5解析excel

  • 乔山办公网excel表格制作
  • 首先,e68a84e8a2ad7a686964616f331我们打开前文所设置的工程项目。然后,我们在界面设计窗口,加入一个label用于显示,要保存的目录。注意设置下相应的界面布局。然后,我们在mainwindow.
关键词不能为空
极力推荐

ppt怎么做_excel表格制作_office365_word文档_365办公网