wumu
2024-05-13 ac4aaf95358d7eabc5331e30c1272ebb6eba5478
0513
4个文件已修改
548 ■■■■■ 已修改文件
internal_system_v1/converinfo2.cpp 540 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
internal_system_v1/converinfo2.h 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
internal_system_v1/converinfo2.ui 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
internal_system_v1/internal_system_v1.pro.user 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
internal_system_v1/converinfo2.cpp
@@ -17,6 +17,9 @@
    //initUi();
    readInfo(); // 加载表格
    addMenu(); // 增加菜单
    // 自适应处理
    ui->treeWidget->header()->setSectionResizeMode(QHeaderView::ResizeToContents);
}
ConverInfo2::~ConverInfo2()
@@ -995,7 +998,542 @@
    }
}
void ConverInfo2::on_pushButton_laodFile_clicked()
void ConverInfo2::readExcelFromPath(QString path)
{
    QAxObject excel("ket.Application");
    if(!excel.setControl("ket"
                         ".Application")){  // windows内核
        excel.setControl("Excel.Application"); // wps内核
    }
    excel.setProperty("Visible",false);
    excel.setProperty("DisplayAlerts",false);
    qDebug()<<"open:"<<path;
    qDebug()<<"excel:"<<excel.className();
    QAxObject * wbs = excel.querySubObject("WorkBooks");
    qDebug()<<"wbs:"<<wbs->className();
    QAxObject * wb = wbs->querySubObject("Open(QString&)",path);
    //QAxObject* pWorkBook = excel.querySubObject("ActiveWorkBook");
    //QAxObject* pWorkSheets = pWorkBook->querySubObject("Sheets");//获取工作表
    //QAxObject * shs = wb->querySubObject("Sheets"); // WorkSheets 也可以
    QAxObject * shs = wb->querySubObject("WorkSheets"); // WorkSheets 也可以
//            // 指定单元格拿
//            QAxObject *cell = shs->querySubObject("Cells(int, int)",82,1);
//            qDebug()<<"Cells:82-0:"<<shs->querySubObject("Cells(int, int)",82,0)->dynamicCall("Value()").toString();
//            qDebug()<<"Cells:82-1:"<<cell->dynamicCall("Value()").toString();
    int cnt = shs->property("Count").toInt();
    qDebug()<<"cnt="<<cnt;
    for(int i=0;i<cnt;++i){
        QAxObject * sheet = shs->querySubObject("Item(int)", i+1);
        QString sheetName = sheet->property("Name").toString();
        qDebug()<<"sh name:"<<sheetName;
        QAxObject *usedRange = sheet->querySubObject("UsedRange");
        int rows = usedRange->querySubObject("Rows")->property("Count").toInt();
        int columns = usedRange->querySubObject("Columns")->property("Count").toInt();
        qDebug()<<"r--c:"<<rows<<columns;
        QVariant  val = usedRange->dynamicCall("Value"); // 拿到二维表格
        QVariantList valRows = val.toList();
        // 遍历每一项
//                for(int i=0;i<rows;++i){
//                    QVariantList valrow = valRows[i].toList();
//                    for(int j=0;j<columns;++j){
//                        QVariant valData = valrow[j];
//                        if(valData.isValid()){
//                            qDebug()<<"val:"<< i<< j << valData;
//                        }
//                    }
//                }
        // 实例化结构体,然后挨个赋值
        ComInfo curComInfo;
        // 统一信用代码
        QVariant uniCode = valRows[9].toList().at(3);
        if(uniCode.isValid()){
            ui->label_creditCode->setText(uniCode.toString());
            strcpy(curComInfo.creditCode,uniCode.toString().toLocal8Bit().data());
        }
        // 单位名称
        QVariant name = valRows[9].toList().at(8);
        if(name.isValid()){
            ui->label_name->setText(name.toString());
//            // 菜单相关  当上级公司为空上级时,自己当自己的上级,并且罗列进去当 本级
//            QTreeWidgetItem *top1 = new QTreeWidgetItem(ui->treeWidget);
//            top1->setText(0,name.toString());
            strcpy(curComInfo.name,name.toString().toLocal8Bit().data());
        }else{
            ui->label_name->setText("");
        }
        // 机构类型
        QVariant comType = valRows[12].toList().at(3);
        if(comType.isValid()){
            ui->label_comType->setText(comType.toString());
            strcpy(curComInfo.comType,comType.toString().toLocal8Bit().data());
        }else{
            ui->label_comType->setText("");
        }
        // 主要业务活动
        QString business;
        QVariant first = valRows[18].toList().at(2);
        if(first.isValid()){
            business.append(first.toString());
        }
        QVariant sec = valRows[18].toList().at(5);
        if(sec.isValid()){
            business += "、";
            business.append(sec.toString());
        }
        QVariant third = valRows[18].toList().at(8);
        if(third.isValid()){
            business += "、";
            business.append(third.toString());
        }
        if(business.size() > 0){
            ui->label_business->setText(business);
            ui->label_business->setToolTip(business);
            strcpy(curComInfo.business,business.toLocal8Bit().data());
        }else{
            ui->label_business->setText("");
        }
        // 业务代码
        QVariant busCode = valRows[19].toList().at(4);
        if(busCode.isValid()){
            ui->label_businessCode->setText(busCode.toString());
            strcpy(curComInfo.businessCode,busCode.toString().toLocal8Bit().data());
        }else{
            ui->label_businessCode->setText("");
        }
        // 注册地址
        QString addr="";
        QVariant province = valRows[21].toList().at(1); // 省份
        QVariant city = valRows[21].toList().at(4); // 城市
        QVariant district = valRows[21].toList().at(7); // 管辖区
        QVariant village = valRows[22].toList().at(2); // 乡镇
        QVariant street = valRows[22].toList().at(4); // 街道
        QVariant Sub = valRows[23].toList().at(2); // 街道办事处
        QVariant committee = valRows[25].toList().at(3); // 居委会
        //qDebug()<<province<<city<<district<<village<<street<<Sub<<committee;
        if(province.isValid()) addr += province.toString();
        if(city.isValid()) addr += city.toString();
        if(district.isValid()) addr += district.toString();
        if(village.isValid()) addr += village.toString();
        if(street.isValid()) addr += street.toString();
        if(Sub.isValid()) addr += Sub.toString();
        if(committee.isValid()) addr += committee.toString();
        if(addr.size()>10){
            ui->label_addr->setText(addr);
            strcpy(curComInfo.addr,addr.toLocal8Bit().data());
        }else{
            ui->label_addr->setText("");
        }
        // 区域代码
        QVariant areaCode = valRows[24].toList().at(2);
        if(areaCode.isValid()){
            ui->label_areaCode->setText(areaCode.toString());
            strcpy(curComInfo.areaCode,areaCode.toString().toLocal8Bit().data());
        }else{
            ui->label_areaCode->setText("");
        }
        // 城乡代码
        QVariant townCode = valRows[24].toList().at(6);
        if(townCode.isValid()) {
            ui->label_townCode->setText(townCode.toString());
            strcpy(curComInfo.townCode,townCode.toString().toLocal8Bit().data());
        }else{
            ui->label_townCode->setText("");
        }
        // 单位规模
        QVariant scale = valRows[25].toList().at(3);
        if(scale.isValid()){
            ui->label_scale->setText(scale.toString());
            strcpy(curComInfo.scale,scale.toString().toLocal8Bit().data());
        }else{
            ui->label_scale->setText("");
        }
        // 从业人数
        QVariant people = valRows[26].toList().at(6);
        if(people.isValid()) {
            ui->label_people->setText(people.toString());
            //strcpy(curComInfo.people,people.toString().toLocal8Bit().data());
            curComInfo.people = people.toInt();
        }else{
            ui->label_people->setText("");
        }
        // 法人
        QVariant representative = valRows[27].toList().at(4);
        if(representative.isValid()) {
            ui->label_representative->setText(representative.toString());
            strcpy(curComInfo.representative,representative.toString().toLocal8Bit().data());
        }else{
            ui->label_representative->setText("");
        }
        // 会计标准类别 standardType
        QVariant standardType = valRows[27].toList().at(8);
        if(standardType.isValid()){
            ui->label_standardType->setText(standardType.toString());
            strcpy(curComInfo.standardType,standardType.toString().toLocal8Bit());
        }else{
            ui->label_standardType->setText("");
        }
        // 长途区号
        QVariant trunkCode = valRows[31].toList().at(2);
        if(trunkCode.isValid()){
            ui->label_trunkCode->setText(trunkCode.toString());
            strcpy(curComInfo.trunkCode,trunkCode.toString().toLocal8Bit().data());
        }else{
            ui->label_trunkCode->setText("");
        }
        // 固定电话
        QVariant fixedTel = valRows[32].toList().at(2);
        if(fixedTel.isValid()) {
            ui->label_fixedTel->setText(fixedTel.toString());
            strcpy(curComInfo.fixedTel,fixedTel.toString().toLocal8Bit().data());
        }else{
            ui->label_fixedTel->setText("");
        }
        // 邮政编码
        QVariant postCode = valRows[33].toList().at(2);
        if(postCode.isValid()){
            ui->label_postCode->setText(postCode.toString());
            strcpy(curComInfo.postCode,postCode.toString().toLocal8Bit().data());
        }else{
            ui->label_postCode->setText("");
        }
        // 电子邮箱
        QVariant email = valRows[30].toList().at(5);
        if(email.isValid()) {
            ui->label_email->setText(email.toString());
            strcpy(curComInfo.email,email.toString().toLocal8Bit().data());
        }else{
            ui->label_email->setText("");
        }
        // 网址
        QVariant webSite = valRows[32].toList().at(5);
        if(webSite.isValid()) {
            ui->label_webSite->setText(webSite.toString());
            strcpy(curComInfo.webSite,webSite.toString().toLocal8Bit().data());
        }else{
            ui->label_webSite->setText("");
        }
        // 二、单位组织结构情况
        // 是否有上一级法人
        QVariant hasUpLegal = valRows[35].toList().at(4);
        if(hasUpLegal.isValid()){
            strcpy(curComInfo.hasUpLegal,hasUpLegal.toString().toLocal8Bit().data());
            qDebug()<<"has up legal"<<hasUpLegal;
        }
        // 上级法人单位统一社会信用代码
        QVariant upCreditCode = valRows[36].toList().at(7);
        if(upCreditCode.isValid()){
            strcpy(curComInfo.upCreditCode,upCreditCode.toString().toLocal8Bit().data());
            qDebug()<<"upCreditCode"<<upCreditCode;
        }else {
            qDebug()<<"upCreditCode fail"<<name;
        }
        // 原组织机构代码
        QVariant oldCreditCode = valRows[37].toList().at(7);
        if(oldCreditCode.isValid()){
            strcpy(curComInfo.oldCreditCode,oldCreditCode.toString().toLocal8Bit().data());
            qDebug()<<"oldCreditCode"<<oldCreditCode;
        }
        // 上一级单位详细名称
        QVariant upName = valRows[38].toList().at(7);
        if(upName.isValid()){
            strcpy(curComInfo.upName,upName.toString().toLocal8Bit().data());
            qDebug()<<"upName"<<upName;
        }
        // 总审计师与内审机构基本情况
        // 是否设置总审计师
        QVariant hasChiefDesigner = valRows[40].toList().at(4);
        if(hasChiefDesigner.isValid()){
            strcpy(curComInfo.hasChiefDesigner,hasChiefDesigner.toString().toLocal8Bit().data());
            qDebug()<<"hasChiefDesigner"<<hasChiefDesigner;
        }
        // 总审计师职位层级
        QVariant ChiefDesignerLevel = valRows[41].toList().at(4);
        if(ChiefDesignerLevel.isValid()){
            strcpy(curComInfo.ChiefDesignerLevel,ChiefDesignerLevel.toString().toLocal8Bit().data());
            qDebug()<<"ChiefDesignerLevel"<<ChiefDesignerLevel;
        }
        // 总审计师任职方式
        QVariant employmentMode = valRows[44].toList().at(4);
        if(employmentMode.isValid()){
            strcpy(curComInfo.employmentMode,employmentMode.toString().toLocal8Bit().data());
            qDebug()<<"employmentMode"<<employmentMode;
        }
        // 是否设置内审机构
        QVariant hasSetIntervalAudit = valRows[47].toList().at(4);
        if(hasSetIntervalAudit.isValid()){
            strcpy(curComInfo.hasSetIntervalAudit,hasSetIntervalAudit.toString().toLocal8Bit().data());
            qDebug()<<"hasSetIntervalAudit"<<hasSetIntervalAudit;
        }
        // 内审机构名称
        QVariant internalName = valRows[48].toList().at(4);
        if(internalName.isValid()){
            strcpy(curComInfo.internalName,internalName.toString().toLocal8Bit().data());
            qDebug()<<"internalName"<<internalName;
        }
        // 内审工作的领导机构
        QVariant leadingOrganization = valRows[49].toList().at(4);
        if(leadingOrganization.isValid()){
            strcpy(curComInfo.leadingOrganization,leadingOrganization.toString().toLocal8Bit().data());
            qDebug()<<"leadingOrganization"<<leadingOrganization;
        }
        // 是否独立设置内审机构
        QVariant hasSetSeparateIA = valRows[53].toList().at(4);
        if(hasSetSeparateIA.isValid()){
            strcpy(curComInfo.hasSetSeparateIA,hasSetSeparateIA.toString().toLocal8Bit().data());
            qDebug()<<"hasSetSeparateIA"<<hasSetSeparateIA;
        }
        // 合并设置 财务部门   复选框
        QVariant financeDepartment = valRows[55].toList().at(1);
        if(financeDepartment.isValid()){
            //strcpy(curComInfo.financeDepartment,financeDepartment.toString().toLocal8Bit().data());
            curComInfo.financeDepartment = financeDepartment.toBool();
            qDebug()<<"financeDepartment"<<financeDepartment;
        }
        // 法务部门、内部控制部门、纪检部门、其他部门
        // 内审机构层级
        QVariant intavalAuditLeval = valRows[56].toList().at(4);
        if(intavalAuditLeval.isValid()){
            strcpy(curComInfo.intavalAuditLeval,intavalAuditLeval.toString().toLocal8Bit().data());
            qDebug()<<"intavalAuditLeval"<<intavalAuditLeval;
        }
        // 四、内审人员配备基本情况
        // 编制数
        QVariant organazationNum = valRows[56].toList().at(4);
        if(organazationNum.isValid()){
            curComInfo.organazationNum = organazationNum.toInt();
            qDebug()<<"organazationNum"<<organazationNum;
        }
        // 实有人员数
        QVariant realNum = valRows[56].toList().at(4);
        if(realNum.isValid()){
            curComInfo.realNum = realNum.toInt();
            qDebug()<<"realNum"<<realNum;
        }
        // 专职人员数
        QVariant professionalNum = valRows[56].toList().at(4);
        if(professionalNum.isValid()){
            curComInfo.professionalNum = professionalNum.toInt();
            qDebug()<<"professionalNum"<<professionalNum;
        }
        // 拥有CIA人员数
        QVariant CIANum = valRows[56].toList().at(4);
        if(CIANum.isValid()){
            curComInfo.CIANum = CIANum.toInt();
            qDebug()<<"CIANum"<<CIANum;
        }
        // 学历:硕士及以上 人员数
        QVariant masterNum = valRows[56].toList().at(4);
        if(masterNum.isValid()){
            curComInfo.masterNum = masterNum.toInt();
            qDebug()<<"masterNum"<<masterNum;
        }
        // 大学本科
        QVariant undergraduatesNum = valRows[56].toList().at(4);
        if(undergraduatesNum.isValid()){
            curComInfo.undergraduatesNum = undergraduatesNum.toInt();
            qDebug()<<"undergraduatesNum"<<undergraduatesNum;
        }
        // 专科及以下
        QVariant juniorNum = valRows[56].toList().at(4);
        if(juniorNum.isValid()){
            curComInfo.juniorNum = juniorNum.toInt();
            qDebug()<<"juniorNum"<<juniorNum;
        }
        // 职称 高级职称
        QVariant seniorNum = valRows[56].toList().at(4);
        if(seniorNum.isValid()){
            curComInfo.seniorNum = seniorNum.toInt();
            qDebug()<<"seniorNum"<<seniorNum;
        }
        // 中级职称
        QVariant intermediateNum = valRows[56].toList().at(4);
        if(intermediateNum.isValid()){
            curComInfo.intermediateNum = intermediateNum.toInt();
            qDebug()<<"intermediateNum"<<intermediateNum;
        }
        // 初级职称
        QVariant primaryNum = valRows[56].toList().at(4);
        if(primaryNum.isValid()){
            curComInfo.primaryNum = primaryNum.toInt();
            qDebug()<<"primaryNum"<<primaryNum;
        }
        // 无职称
        QVariant noTitleNum = valRows[56].toList().at(4);
        if(noTitleNum.isValid()){
            curComInfo.noTitleNum = noTitleNum.toInt();
            qDebug()<<"noTitleNum"<<noTitleNum;
        }
        // 年龄结构 50岁以上
        QVariant upFiftyOldNum = valRows[56].toList().at(4);
        if(upFiftyOldNum.isValid()){
            curComInfo.upFiftyOldNum = upFiftyOldNum.toInt();
            qDebug()<<"upFiftyOldNum"<<upFiftyOldNum;
        }
        // 30-50岁
        QVariant upThirtyOldNum = valRows[56].toList().at(4);
        if(upThirtyOldNum.isValid()){
            curComInfo.upThirtyOldNum = upThirtyOldNum.toInt();
            qDebug()<<"upThirtyOldNum"<<upThirtyOldNum;
        }
        // 30岁以下
        QVariant downThirtyOldNum = valRows[56].toList().at(4);
        if(downThirtyOldNum.isValid()){
            curComInfo.downThirtyOldNum = downThirtyOldNum.toInt();
            qDebug()<<"downThirtyOldNum"<<downThirtyOldNum;
        }
        // 知识结构 审计
        QVariant auditNum = valRows[56].toList().at(4);
        if(auditNum.isValid()){
            curComInfo.auditNum = auditNum.toInt();
            qDebug()<<"auditNum"<<auditNum;
        }
        // 会计
        QVariant accountingNum = valRows[56].toList().at(4);
        if(accountingNum.isValid()){
            curComInfo.accountingNum = accountingNum.toInt();
            qDebug()<<"accountingNum"<<accountingNum;
        }
        // 经济
        QVariant economyNum = valRows[56].toList().at(4);
        if(economyNum.isValid()){
            curComInfo.economyNum = economyNum.toInt();
            qDebug()<<"economyNum"<<economyNum;
        }
        // 法律
        QVariant lawNum = valRows[56].toList().at(4);
        if(lawNum.isValid()){
            curComInfo.lawNum = lawNum.toInt();
            qDebug()<<"lawNum"<<lawNum;
        }
        // 管理
        QVariant managerNum = valRows[56].toList().at(4);
        if(managerNum.isValid()){
            curComInfo.managerNum = managerNum.toInt();
            qDebug()<<"managerNum"<<managerNum;
        }
        // 信息技术
        QVariant itNum = valRows[56].toList().at(4);
        if(itNum.isValid()){
            curComInfo.itNum = itNum.toInt();
            qDebug()<<"itNum"<<itNum;
        }
        // 工程
        QVariant engineeringNum = valRows[56].toList().at(4);
        if(engineeringNum.isValid()){
            curComInfo.engineeringNum = engineeringNum.toInt();
            qDebug()<<"engineeringNum"<<engineeringNum;
        }
        // 其他
        QVariant otherNum = valRows[56].toList().at(4);
        if(otherNum.isValid()){
            curComInfo.otherNum = otherNum.toInt();
            qDebug()<<"otherNum"<<otherNum;
        }
        // 后面的4个信息
        // 统计负责人
        QVariant statisticalConOfficer = valRows[81].toList().at(1);
        if(statisticalConOfficer.isValid()){
            strcpy(curComInfo.statisticalConOfficer,statisticalConOfficer.toString().toLocal8Bit().data());
            qDebug()<<"statisticalConOfficer"<<statisticalConOfficer;
        }else{
            qDebug()<<"statisticalConOfficer fail:"<<name.toString();
        }
        // 填表人
        QVariant personFilling = valRows[81].toList().at(4);
        if(personFilling.isValid()){
            strcpy(curComInfo.personFilling,personFilling.toString().toLocal8Bit().data());
            qDebug()<<"personFilling"<<personFilling;
        }
        // 联系电话
        QVariant officerTel = valRows[82].toList().at(1);
        if(officerTel.isValid()){
            strcpy(curComInfo.officerTel,officerTel.toString().toLocal8Bit().data());
            qDebug()<<"officerTel"<<officerTel;
        }
        // 填报日期
        QVariant fillingDateTime = valRows[82].toList().at(4);
        if(fillingDateTime.isValid()){
            strcpy(curComInfo.fillingDateTime,fillingDateTime.toString().toLocal8Bit().data());
            qDebug()<<"fillingDateTime"<<fillingDateTime;
        }
        // 最后存到map中
        m_nameAndComInfos[name.toString()]=curComInfo;
        // 添加左边树形图相关
        // 菜单相关  当上级公司为空上级时,自己当自己的上级,并且罗列进去当 本级
        if(upName.isValid()) // 有效
        {
            // 判断顶层树节点是否已经存在
            QTreeWidgetItem *top = nullptr;
            for(int k=0;k<ui->treeWidget->topLevelItemCount();++k){
                QTreeWidgetItem *tmp = ui->treeWidget->topLevelItem(k);
                qDebug()<<k<<tmp->text(0)<<upName.toString();
                if(upName.toString()+"(汇总)" == tmp->text(0)){
                    top = tmp;
                    break;
                }
            }
            if(name.isValid()){
                if(top){ // 存在,则添加到孩子列表中
                    QTreeWidgetItem *top1 = new QTreeWidgetItem(top);
                    top1->setText(0,name.toString());
                }else{ // 不存在,则新建一个列表
                    QTreeWidgetItem *top1 = new QTreeWidgetItem(ui->treeWidget);
                    top1->setText(0,name.toString()+"(汇总)");
                    QTreeWidgetItem *top2 = new QTreeWidgetItem(top1);
                    top2->setText(0,name.toString()+"(本级)");
                }
            }
        }else{
            qDebug()<<"没发现上一级,只能自己当"<<name;
            if(name.isValid()){
                QTreeWidgetItem *top1 = new QTreeWidgetItem(ui->treeWidget);
                top1->setText(0,name.toString()+"(汇总)");
                QTreeWidgetItem *top2 = new QTreeWidgetItem(top1);
                top2->setText(0,name.toString()+"(本级)");
            }
        }
    }
    wbs->dynamicCall("Close()");
    excel.dynamicCall("Quit(void)");
    qDebug()<<"单位信息数量:"<<m_nameAndComInfos.size();
}
void ConverInfo2::on_pushButton_laodFile_clicked()
{
    QString path = QFileDialog::getOpenFileName(this,"选择表格:单位及内部审计机构基本情况表","./","excel(*基本情况表*.xls)");
    qDebug()<<"path:"<<path;
    if(path.size() > 1){
        readExcelFromPath(path);
    }
}
internal_system_v1/converinfo2.h
@@ -22,6 +22,8 @@
    void initUi();
    void readInfo();
    void addMenu();
    void readExcelFromPath(QString path);
private slots:
    void showMenu(QPoint p);
    void addInfo();
internal_system_v1/converinfo2.ui
@@ -19,7 +19,7 @@
     <widget class="QTreeWidget" name="treeWidget">
      <property name="maximumSize">
       <size>
        <width>300</width>
        <width>500</width>
        <height>16777215</height>
       </size>
      </property>
@@ -38,7 +38,7 @@
      <widget class="QWidget" name="scrollAreaWidgetContents">
       <property name="geometry">
        <rect>
         <x>-115</x>
         <x>0</x>
         <y>0</y>
         <width>1100</width>
         <height>1600</height>
internal_system_v1/internal_system_v1.pro.user
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE QtCreatorProject>
<!-- Written by QtCreator 4.5.0, 2024-04-20T19:27:31. -->
<!-- Written by QtCreator 4.5.0, 2024-05-13T00:49:29. -->
<qtcreator>
 <data>
  <variable>EnvironmentId</variable>