• 9658阅读
  • 28回复

QT excel [复制链接]

上一主题 下一主题
离线feiyang0725
 

只看楼主 倒序阅读 楼主  发表于: 2012-12-24
qt excel格式控制函数
如何控制单元格大小,居中,绘制边框等功能?
离线realfan

只看该作者 1楼 发表于: 2012-12-24
QAxObject *range = ...->querySubObject("Range(const QString&)", cell);
    range->setProperty("HorizontalAlignment", -4108);//xlCenter

居中
离线realfan

只看该作者 2楼 发表于: 2012-12-24
QAxObject *range = ...
    range->dynamicCall("BorderAround", Style, Width,ColorIndex);

//Style值:0- no line; 1-solid; 2-big dot;3-small dot;4-dash dot; 5-dash dot dot;
ColorIndex:1-black;2-white;3-red;4-green;5-blue; 6-yellow; 7-pink;8-dark blue;
离线feiyang0725

只看该作者 3楼 发表于: 2012-12-24
回 2楼(realfan) 的帖子
QAxObject *cellX = worksheet->querySubObject("Range(QVariant, QVariant)",X);//获取单元格
             cellX->setProperty("HorizontalAlignment", -4108);//
            cellX->dynamicCall("SetValue(const QVariant&)",QVariant(“123”));//设置单元格的值没有居中。。这是为什么?
离线feiyang0725

只看该作者 4楼 发表于: 2012-12-24
回 2楼(realfan) 的帖子
QAxObject *cellX = worksheet->querySubObject("Range(QVariant, QVariant)",X);//获取单元格
cellX->dynamicCall("SetValue(const QVariant&)",QVariant(“123”));            
cellX->setProperty("HorizontalAlignment", -4108);//也是不行的?
            
离线feiyang0725

只看该作者 5楼 发表于: 2012-12-24
X=A1
离线realfan

只看该作者 6楼 发表于: 2012-12-24
QAxObject *cellX = worksheet->querySubObject("Range(QVariant, QVariant)",X);//获取单元格
这句不对
应该是(比如A1单元格)
QAxObject *cellX = worksheet->querySubObject("Range(const QString&)",  “A1”);
离线feiyang0725

只看该作者 7楼 发表于: 2012-12-25
回 6楼(realfan) 的帖子

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 *worksheets = workbook->querySubObject("Sheets");//获取工作表集合
        QAxObject *worksheet = worksheets->querySubObject("Item(int)",1);//获取工作表集合的工作表1,即sheet1
cellX = worksheet->querySubObject("Range(const QString&)","A1");
        cellX->setProperty("HorizontalAlignment", -4108);
        cellX->dynamicCall("SetValue(const QVariant&)",QVariant("123"));
还是不行啊。。。
离线realfan

只看该作者 8楼 发表于: 2012-12-25
回 7楼(feiyang0725) 的帖子
这样呢
cellX = worksheet->querySubObject("Range(const QString&)","A1");
cellX->setProperty("NumberFormat", "@");
cellX->setProperty("HorizontalAlignment", -4108);
cellX->dynamicCall("SetValue(const QVariant&)",QString("123"));
离线feiyang0725

只看该作者 9楼 发表于: 2012-12-25
回 8楼(realfan) 的帖子
....还是不行啊。。
离线feiyang0725

只看该作者 10楼 发表于: 2012-12-25
回 8楼(realfan) 的帖子
能加个QQ交流下吗?。。。。1846951401
离线realfan

只看该作者 11楼 发表于: 2012-12-25
回 10楼(feiyang0725) 的帖子
在公司,上不了QQ

你把这句
cellX->dynamicCall("SetValue(const QVariant&)",QString("123"));
改成
cellX->dynamicCall("SetValue(const QString&)",QString("123"));
再试试
离线feiyang0725

只看该作者 12楼 发表于: 2012-12-25
回 11楼(realfan) 的帖子
换了几种赋值方式还是不行,估计还是
cellX = worksheet->querySubObject("Range(const QString&)","A1");
cellX->setProperty("NumberFormat", "@");
cellX->setProperty("HorizontalAlignment", -4108);
出问题了。。
离线realfan

只看该作者 13楼 发表于: 2012-12-25
回 12楼(feiyang0725) 的帖子
再截个图
离线realfan

只看该作者 14楼 发表于: 2012-12-25
回 12楼(feiyang0725) 的帖子
还有这部分的代码片段
离线feiyang0725

只看该作者 15楼 发表于: 2012-12-25
回 14楼(realfan) 的帖子
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 *worksheets = workbook->querySubObject("Sheets");//获取工作表集合
        QAxObject *worksheet = worksheets->querySubObject("Item(int)",1);//获取工作表集合的工作表1,即sheet1
        QAxObject *cellX;

        //QAxObject *mergeRange = sheet->querySubObject("Range(QVariant)", tr("A%1:D%2").arg(1).arg(1));
        //mergeRange->dynamicCall("Merge(QVariant)", "true");
        

        cellX = worksheet->querySubObject("Range(const QString&)","A1");//获取单元格
        cellX->setProperty("HorizontalAlignment",  -4108);
        cellX->dynamicCall("SetValue(const QString&)","123");//*/
        /*cellX = worksheet->querySubObject("Range(const QString&)","A1");
        cellX->setProperty("NumberFormat", "@");
        cellX->setProperty("HorizontalAlignment", -4108);
        cellX->dynamicCall("SetValue(const QString&)",QString::fromLocal8Bit("能"));*/
        //cellX->setProperty("VerticalAlignment",  -4108);
        //cellX->setProperty("WrapText", true);
        //cellX->setProperty("MergeCells", true);
离线feiyang0725

只看该作者 16楼 发表于: 2012-12-25
回 14楼(realfan) 的帖子
这是代码了。。
离线realfan

只看该作者 17楼 发表于: 2012-12-25
这段代码,在A1单元格居中填123,我已经试过了,肯定可以
    QAxObject * pExcel = new QAxObject("Excel.Application", this);
    QAxObject * pWorkBooks = pExcel->querySubObject("Workbooks");

    pWorkBooks->dynamicCall("Add");
    QAxObject * pWorkBook = pExcel->querySubObject("ActiveWorkBook");
    QAxObject * pSheet = pWorkBook->querySubObject("Worksheets(int)", 1);
    pExcel->setProperty("Visible", true);

    QAxObject *range = pSheet->querySubObject("Cells(int,int)", 1, 1);
    range->setProperty("NumberFormat", "@");
    range->setProperty("HorizontalAlignment", -4108);
    range->dynamicCall("SetValue(const QString&)", "123");
离线realfan

只看该作者 18楼 发表于: 2012-12-25
untitled1234.zip (2 K) 下载次数:14
这是我测试的代码工程,你可以试试
离线feiyang0725

只看该作者 19楼 发表于: 2012-12-26
回 18楼(realfan) 的帖子
是不是QT版本问题啊,我是4.7的,运行你的代码还是不能居中
是不是excel版本也有关系,我的excel是03的?。。。。。。
离线feiyang0725

只看该作者 20楼 发表于: 2012-12-26
原因很奇怪是不是和电脑系统也有关,我的是XP的
离线feiyang0725

只看该作者 21楼 发表于: 2012-12-26
。。。头疼的现象
离线realfan

只看该作者 22楼 发表于: 2012-12-26
我是Win7  Qt4.8.4 MSOffice2010
按理说应该与Qt没关系。最可能是与Excel版本有关。
你可以查一下Excel2003居中,用什么参数。录个宏,从VBA代码就可以看到。
离线feiyang0725

只看该作者 23楼 发表于: 2012-12-26
回 22楼(realfan) 的帖子
之前试过4.8也是不行,现在正在虚拟机上试。。。可能还是和系统或者excel版本有关。。。03的有这个参数,还有个现象就是Win7 2010的excel导出我的程序时报错。。这是什么原因?在自己的电脑上可以运行的。。
离线realfan

只看该作者 24楼 发表于: 2012-12-27
我找了台XP电脑,Office2003,也是好的呀。不知道你那是怎么回事了
离线feiyang0725

只看该作者 25楼 发表于: 2012-12-27
回 24楼(realfan) 的帖子
我在虚拟机上装了个win7然后装了个2010的office,运行你给的程序还是不行。。估计是qt的版本问题吧。。是不是那个excel的组件库的问题啊?
离线feiyang0725

只看该作者 26楼 发表于: 2012-12-27
回 24楼(realfan) 的帖子
那几个excel的库,是不是也有版本啊?我装4.7的时候自带的。4.8上面就没有这几个库的
离线feiyang0725

只看该作者 27楼 发表于: 2012-12-27
搞定了。。果然是库的问题,我的库不支持这些操作~~~~
离线feiyang0725

只看该作者 28楼 发表于: 2013-02-01
如何在合并单元格之后让写入的内容自适应宽度?
我现在合并单元格后将值写入A单元格,但是值超出单元格了,宽度没有自适应了。。
改怎么解决?
快速回复
限100 字节
 
上一个 下一个