本文目录一览:

如何使用Qt来操作Excel

Qt操作Excel,无论后缀是xls还是xlsx都可以。

1.如下,是下载的一个Excel VBA参考手册,内容不算太全!

2.Excel读取

为了便于测试,假设已存在一个excel文件,操作内容已经被红色标记出来。如下所示:

主要读取内容:

标题

工作表数目

工作表名称

起始行

起始列

行数

列数

单元格内容

代码如下:

QAxObject excel("Excel.Application");

excel.setProperty("Visible", true);

QAxObject *work_books = excel.querySubObject("WorkBooks");

work_books-dynamicCall("Open (const QString)",  QString("E:/test.xlsx"));

QVariant title_value = excel.property("Caption");  //获取标题

qDebug()QString("excel title : ")title_value;

QAxObject *work_book = excel.querySubObject("ActiveWorkBook");

QAxObject *work_sheets = work_book-querySubObject("Sheets");   //Sheets也可换用WorkSheets

int sheet_count = work_sheets-property("Count").toInt();   //获取工作表数目

qDebug()QString("sheet count : ")sheet_count;

for(int i=1; i=sheet_count; i++)

{

QAxObject *work_sheet = work_book-querySubObject("Sheets(int)", i);   //Sheets(int)也可换用Worksheets(int)

QString work_sheet_name = work_sheet-property("Name").toString();   //获取工作表名称

QString message = QString("sheet ")+QString::number(i, 10)+ QString("  name");

qDebug()messagework_sheet_name;

}

if(sheet_count 0)

{

QAxObject *work_sheet = work_book-querySubObject("Sheets(int)", 1);

QAxObject *used_range = work_sheet-querySubObject("UsedRange");

QAxObject *rows = used_range-querySubObject("Rows");

QAxObject *columns = used_range-querySubObject("Columns");

int row_start = used_range-property("Row").toInt();  //获取起始行

int column_start = used_range-property("Column").toInt();   //获取起始列

int row_count = rows-property("Count").toInt();  //获取行数

int column_count = columns-property("Count").toInt();   //获取列数

for(int i=row_start; i

{

for(int j=column_start; j

{

QAxObject *cell = work_sheet-querySubObject("Cells(int,int)", i, j);

QVariant cell_value = cell-property("Value");  //获取单元格内容

QString message = QString("row-")+QString::number(i,  10)+QString("-column-")+QString::number(j, 10)+QString(":");

qDebug()messagecell_value;

}

}

}

3.效果如下:

4.Excel增、删、改

主要操作:

设置标题

插入工作表(至最后一行)

设置工作表名称

删除工作表

设置单元格内容

设置单元格字体(类型、大小、加粗、斜体、下划线、颜色等)

设置单元格对齐方式

设置单元格高度、宽度

设置单元格背景色、边框色

合并/拆分单元格

清空单元格

代码如下:

QAxObject excel("Excel.Application");

excel.setProperty("Visible", true);

QAxObject *work_books = excel.querySubObject("WorkBooks");

work_books-dynamicCall("Open(const QString)",  "E://test.xlsx");

excel.setProperty("Caption", "Qt Excel");

QAxObject *work_book = excel.querySubObject("ActiveWorkBook");

QAxObject *work_sheets = work_book-querySubObject("Sheets");   //Sheets也可换用WorkSheets

//删除工作表(删除第一个)

QAxObject *first_sheet = work_sheets-querySubObject("Item(int)",  1);

first_sheet-dynamicCall("delete");

//插入工作表(插入至最后一行)

int sheet_count = work_sheets-property("Count").toInt();   //获取工作表数目

QAxObject *last_sheet = work_sheets-querySubObject("Item(int)",  sheet_count);

QAxObject *work_sheet = work_sheets-querySubObject("Add(QVariant)",  last_sheet-asVariant());

last_sheet-dynamicCall("Move(QVariant)",  work_sheet-asVariant());

work_sheet-setProperty("Name", "Qt Sheet");  //设置工作表名称

//操作单元格(第2行第2列)

QAxObject *cell = work_sheet-querySubObject("Cells(int,int)", 2,  2);

cell-setProperty("Value", "Java C++ C# PHP Perl Python Delphi Ruby");   //设置单元格值

cell-setProperty("RowHeight", 50);  //设置单元格行高

cell-setProperty("ColumnWidth", 30);  //设置单元格列宽

cell-setProperty("HorizontalAlignment", -4108); //左对齐(xlLeft):-4131   居中(xlCenter):-4108  右对齐(xlRight):-4152

cell-setProperty("VerticalAlignment", -4108);  //上对齐(xlTop)-4160  居中(xlCenter):-4108  下对齐(xlBottom):-4107

cell-setProperty("WrapText", true);  //内容过多,自动换行

//cell-dynamicCall("ClearContents()");  //清空单元格内容

QAxObject* interior = cell-querySubObject("Interior");

interior-setProperty("Color", QColor(0, 255, 0));    //设置单元格背景色(绿色)

QAxObject* border = cell-querySubObject("Borders");

border-setProperty("Color", QColor(0, 0, 255));    //设置单元格边框色(蓝色)

QAxObject *font = cell-querySubObject("Font");  //获取单元格字体

font-setProperty("Name", QStringLiteral("华文彩云"));  //设置单元格字体

font-setProperty("Bold", true);  //设置单元格字体加粗

font-setProperty("Size", 20);  //设置单元格字体大小

font-setProperty("Italic", true);  //设置单元格字体斜体

font-setProperty("Underline", 2);  //设置单元格下划线

font-setProperty("Color", QColor(255, 0, 0));   //设置单元格字体颜色(红色)

//设置单元格内容,并合并单元格(第5行第3列-第8行第5列)

QAxObject *cell_5_6 = work_sheet-querySubObject("Cells(int,int)", 5,  3);

cell_5_6-setProperty("Value", "Java");  //设置单元格值

QAxObject *cell_8_5 = work_sheet-querySubObject("Cells(int,int)", 8,  5);

cell_8_5-setProperty("Value", "C++");

QString merge_cell;

merge_cell.append(QChar(3 - 1 + 'A'));  //初始列

merge_cell.append(QString::number(5));  //初始行

merge_cell.append(":");

merge_cell.append(QChar(5 - 1 + 'A'));  //终止列

merge_cell.append(QString::number(8));  //终止行

QAxObject *merge_range = work_sheet-querySubObject("Range(const  QString)", merge_cell);

merge_range-setProperty("HorizontalAlignment", -4108);

merge_range-setProperty("VerticalAlignment", -4108);

merge_range-setProperty("WrapText", true);

merge_range-setProperty("MergeCells", true);  //合并单元格

//merge_range-setProperty("MergeCells", false);  //拆分单元格

//work_book-dynamicCall("Save()");   //保存文件(为了对比test与下面的test2文件,这里不做保存操作)  work_book-dynamicCall("SaveAs(const QString)", "E://test2.xlsx");   //另存为另一个文件

work_book-dynamicCall("Close(Boolean)", false);  //关闭文件

excel.dynamicCall("Quit(void)");  //退出

5.效果如下:

操作前:

操作后:

怎样用QT导入导出excel 求代码

我的QT版本是5.3

//下面是代码

void MainWindow:lot2Excel(QString title, QString tablename){

QAxObject *excel = new QAxObject;

QVector QString SubTitle;

SubTitle.fill("", 2);

SubTitle[0] = tr("时间");

SubTitle[1] = tr("温度");

if (excel-setControl("Excel.Application")) //连接Excel控件

{

excel-dynamicCall("SetVisible (bool Visible)","false");//不显示窗体

excel-setProperty("DisplayAlerts", false);//不显示任何警告信息。如果为true那么在关闭是会出现类似“文件已修改,是否保存”的提示

QAxObject *workbooks = excel-querySubObject("WorkBooks");//获取工作簿集合

workbooks-dynamicCall("Add");//新建一个工作簿

QAxObject *workbook = excel-querySubObject("ActiveWorkBook");//获取当前工作簿

QAxObject *worksheet = workbook-querySubObject("Worksheets(int)", 1);

int Column_Cnt = FBGcfg.History.self_FBGHistory2D.size() * SubTitle.size();

//标题行

QAxObject *title1=worksheet-querySubObject("Cells(int,int)", 1, 1);

title1-dynamicCall("SetValue(const QString)", title);

title1-querySubObject("Font")-setProperty("Size", 18);

//合并标题行

QString cellTitle;

cellTitle.append("A1:");

cellTitle.append(QChar(Column_Cnt - 1 + 'A'));

cellTitle.append(QString::number(1));

QAxObject *range1 = worksheet-querySubObject("Range(const QString)", cellTitle);

range1-setProperty("WrapText", true);                   /* 文本自动换行 */

range1-setProperty("MergeCells", true);                 /* 合并单元格 */

range1-setProperty("HorizontalAlignment", -4108);       //xlCenter

range1-setProperty("VerticalAlignment", -4108);         //xlCenter

/* 第二行标题 */

for(int i=0; iFBGcfg.History.self_FBGHistory2D.size(); i++){

int subID = 0;

for(subID = 0; subID FBGcfg.self_FBGCnt; subID ++){

if(FBGcfg.self_FBGID[subID] == FBGcfg.History.self_FBGHistory2D[i])

break;

}

if(subID == FBGcfg.self_FBGCnt)             /* 查询历史表格出错 */

return;

QAxObject *title2 = worksheet-querySubObject("Cells(int,int)", 2, i*2 + 1);

title2-dynamicCall("SetValue(const QString)", FBGcfg.self_FBGNAME[subID] + QString::number(FBGcfg.History.self_FBGHistory2D[i]));

title2-querySubObject("Font")-setProperty("Size", 14);

title2-querySubObject("Interior")-setProperty("Color",QColor(141, 182, 205));

}

/* 第二行标题合并单元格 */

for(int i = 0; i Column_Cnt; i+=2){

QString cellTitle2;

cellTitle2.append(QChar(i + 'A')).append("2:").append(QChar(i + 1 + 'A')).append("2");

QAxObject *range2 = worksheet-querySubObject("Range(const QString)", cellTitle2);

range2-setProperty("WrapText", true);                   /* 文本自动换行 */

range2-setProperty("MergeCells", true);                 /* 合并单元格 */

}

/* 第三行标题 */

for(int i = 0; i Column_Cnt; i++){

QAxObject *colwidth;

QAxObject *title3 = worksheet-querySubObject("Cells(int,int)", 3, i+1);

QString lie;

lie = lie.append(QChar(i + 'A')).append(":").append(QChar(i + 'A'));

colwidth = worksheet-querySubObject("Columns(const QString)", lie);

if(i%2){

colwidth-setProperty("ColumnWidth", 11);

title3-dynamicCall("SetValue(const QString)", SubTitle[1]);

}else{

colwidth-setProperty("ColumnWidth", 22);

title3-dynamicCall("SetValue(const QString)", SubTitle[0]);

}

title3-querySubObject("Font")-setProperty("Size", 12);

title3-querySubObject("Interior")-setProperty("Color",QColor(191, 191, 191));

}

//调整行高 第一行30 第二行25 第三行20

worksheet-querySubObject("Range(const QString)", "1:1")-setProperty("RowHeight", 30);

worksheet-querySubObject("Range(const QString)", "2:2")-setProperty("RowHeight", 25);

worksheet-querySubObject("Range(const QString)", "3:3")-setProperty("RowHeight", 20);

/* 数据区 */

int MaxSize = 0;

QAxObject *CellDataTime = NULL;

QAxObject *CellDataTmp = NULL;

for(int i = 0; i History_BackUp.size(); i++){

if(History_BackUp[i][0].size() MaxSize)

MaxSize = History_BackUp[i][0].size();

for(int j = 0; j History_BackUp[i][0].size(); j ++){

QString timeStr = QDateTime::fromMSecsSinceEpoch(History_BackUp[i][0][j] * 1000.0).toString("yyyy-MM-dd hh:mm:ss");

CellDataTime = worksheet-querySubObject("Cells(int,int)", j + 4, i*2 + 1);

if(CellDataTime)

CellDataTime-dynamicCall("SetValue(const QVariant)",timeStr);

CellDataTmp = worksheet-querySubObject("Cells(int,int)", j + 4, i*2 + 2);

if(CellDataTmp)

CellDataTmp-dynamicCall("SetValue(const QVariant)",QString::number(History_BackUp[i][1][j], 'f', 2));

}

}

//画框线

QString lrange;

lrange.append("A2:");

lrange.append(Column_Cnt - 1 + 'A').append(QString::number(MaxSize + 3));

QAxObject *rangeline = worksheet-querySubObject("Range(const QString)", lrange);

rangeline-querySubObject("Borders")-setProperty("LineStyle", QString::number(1));

rangeline-querySubObject("Borders")-setProperty("Color", QColor(0, 0, 0));

rangeline-setProperty("HorizontalAlignment", -4108);       //xlCenter

rangeline-setProperty("VerticalAlignment", -4108);         //xlCenter

//保存当前目录为我的文档目录,所以要用全路径

workbook-dynamicCall("SaveAs(const QString)",QDir::toNativeSeparators(tablename));

workbook-dynamicCall("Close()");//关闭工作簿

excel-dynamicCall("Quit()");//关闭excel

delete excel;

excel=NULL;

}

}

//上面是代码,希望对你有帮助

QT 导出表内容到Excel中 较长数字在单元格显示 如2.11E+12 的科学计数法了,要怎么解决

我不知道怎么修改QT,但是可以给你一个Excel的修改方法。

1在证件类型后面插入一列,在此列输入一个英文状态下的‘ 号

2在关键字后面的空白列使用函数 CONCATENATE

在TEXT1选择 ' 号      TEXT2选择同行的证件编号

确定后就可以得到正确的身份证号

3复制-选择性粘贴-数值   就可以得到没有函数的纯数字文本

如何将qt中的数据导出到excel中

通过columnCount和rowCount获取到当前tablewidget的行数和列数,通过两个for循环,用QTableWidgetItem*item(introw,intcolumn)const成员函数遍历所有的单元格,再用获取到的QTableWidgetItem对象的virtualQVariantdata(introle)const成员函数取得单元格内数据,再调用QVariant的toString函数取得单元格内数据的字符串格式,然后你就可以将数据写入文件了。

linux下 在QT中把mysql的数据导出excel

方法一:进入到mysql的控制台,输入:

1. SELECT * INTO OUTFILE ‘./test.xls‘ FROM tb1 WHERE 1 ORDER BY id DESC LIMIT 0, 50;

这样,应该会在你的mysql的var/目录下产生一个test.xls的文件。。。

但是如果你的shell的登录帐户和mysql的运行账户不同,很可能这个方法就不适用了,因为你可以通过mysql控制台来产生这个文件,但是你却没有办法通过shell来对这个文件进行操作,因为用户不同,没有访问权限。

这个时候,同事告诉偶滴办法就重装登录了!!!

1. echo "SELECT * FROM tb1 WHERE 1 ORDER BY id DESC LIMIT 0, 50;"| /usr/local/mysql/bin/mysql -hlocalhost -uroot -pxxxxx /tmp/test.xls

ok,把你的test.xls文件从tmp下载到本地打开来看看吧。。。

什么?中文乱码?

别着急。。。

因为office默认的是gb2312编码,服务器端生成的很有可能是utf-8编码,这个时候你有两种选择,

1.在服务器端使用iconv来进行编码转换,

1. iconv -futf8 -tgb2312 -otest2.xls test.xls

如果转换顺利,那么从server上下载下来就可以使用了。

转换如果不顺利,则会提示:iconv: illegal input sequence at position 1841 类似于这样的错误,

先把test.xls下载下来,这个时候文件是utf-8编码的,用excel打开,乱码。

把test.xls以文本方式打开,然后另存为,在编码选择ANSI编码,保存。

望采纳。。。纯手敲