原来Excel 可以使用ODBC直接访问啊,一直以来都是一格一格读取,比较烦,这次又学习了!!
此处记录ODBC连接Excel的DSN字符串:
“DRIVER={Microsoft Excel Driver (*.xls)};FIRSTROWHASNAMES=1;READONLY=FALSE;DBQ=%1”
—%1 为要连接的Excel文件。
—READONLY=FALSE; 如果没有这段,excel默认是按照只读打开的,只能select 操作
—FIRSTROWHASNAMES=1; 这段表明excel文件的第一行是列名。
Widget::Widget(QWidget *parent) :
QWidget(parent),
ui(new Ui::Widget)
{
ui->setupUi(this);
QSqlDatabase excel = QSqlDatabase::addDatabase("QODBC");
QString ExcelFileName = QFileDialog::getOpenFileName(this,tr("选择要打开的文件"),".",tr("Excel File(*.xls)"));
if(ExcelFileName.isEmpty())
return;
QString dsn =QString("DRIVER={Microsoft Excel Driver (*.xls)};FIRSTROWHASNAMES=1;READONLY=FALSE;DBQ=%1").arg(ExcelFileName);
excel.setDatabaseName(dsn);
if(!excel.open())
{
qDebug() <<"open database file "<<ExcelFileName<<"error!";
return;
}
QSqlQuery query = QSqlQuery(excel);
query.exec("select * from [people$]");
//读取记录
qDebug()<<query.record().count();
query.next();
//QTextCodec *codec = QTextCodec::codecForName("UTF-8");
qDebug()<<query.value("name").toString();
ui->lineEdit->setText(query.value("name").toString());
//插入记录
if(!query.exec("insert into [people$](id,name,old) values(5,'nowhaha',43)"))
{
//qDebug()<< query.lastError().text();
QMessageBox::information(this,"info", query.lastError().text());
}
}