本文目录一览:
- 1、如何使用Qt来操作Excel
- 2、怎样用QT导入导出excel 求代码
- 3、QT 导出表内容到Excel中 较长数字在单元格显示 如2.11E+12 的科学计数法了,要怎么解决
- 4、如何将qt中的数据导出到excel中
- 5、linux下 在QT中把mysql的数据导出excel
如何使用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编码,保存。
望采纳。。。纯手敲