⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 excel_sample.prg

📁 Excel报表 我做的
💻 PRG
📖 第 1 页 / 共 2 页
字号:
SET talk off

local ckzs,cmsl,lszs,hbh1,hbh2,hbh3,hbh4,hbh5,hbh6,hbh7,hbh8,hbh9,hbL1,zdkd,i,add_hs,guest_name_temp

DECLARE INTEGER GetPrivateProfileString IN Win32API AS GetPrivStr ;
String cSection, String cKey, String cDefault, String @cBuffer, ;
Integer nBufferSize, String cINIFile

LOCAL  lcSection, lcKey, lcBuffer, lcFileName, lcpathmain, lcpathtemp
 PUBLIC UserName,UserPW
 lcFileName = "rksvr.ini"

 lcSection  = "syspath"
 lcKey      = "系统"
 lcBuffer   = SPACE(251)
      GetPrivStr(lcSection, lcKey, "", @lcBuffer, LEN(lcBuffer), CURDIR()+lcFileName)
      lcpathmain=subst(allt(lcBuffer),1,len(allt(lcBuffer))-1)
 lcKey      = "临时"
 lcBuffer   = SPACE(251)
      GetPrivStr(lcSection, lcKey, "", @lcBuffer, LEN(lcBuffer), CURDIR()+lcFileName)
      lcpathtemp=subst(allt(lcBuffer),1,len(allt(lcBuffer))-1)

renk_ole = CreateObject('Excel.application')
renk_ole.workbooks.open(lcpathmain+"chs.xls")
renk_ole.WorkSheets("ac").Activate

      if .not.used('exceltemp')       
         sele 0
         use exceltemp ALIAS exceltemp
      endif
         sele exceltemp
         sum occur_out to ckzs         


      if file('test.xls')
         erase test.xls
      endif

      if file('renk_excel_temp.dbf') 
         if used('renk_excel_temp')   
           sele renk_excel_temp
           use
         endif
         erase renk_excel_temp.dbf
      endif

      select DISTINCT measure FROM exceltemp into dbf renk_excel_temp noconsole
      sele renk_excel_temp
           cmsl=recc()                        
      use
           lszs=11+cmsl*2                         

dime lk(lszs)                                      

          hbh1='A1:'+chr(64+lszs)+'1'
          hbh2='A2:'+chr(64+lszs)+'2'
          hbh5='A5:'+chr(64+lszs)+'5'
          hbh8='A8:'+chr(64+lszs)+'8'

          hbL1=chr(64+6+cmsl)+'6:'+chr(64+6+cmsl)+'7'
          hbh3='A3:'+chr(64+lszs)+'3' 
          hbh4='A4:'+chr(64+lszs)+'4'
          hbh6='A6:'+chr(64+lszs)+'6'
          hbh7='A7:'+chr(64+lszs)+'7'
          hbh9='A9:'+chr(64+lszs)+'9'

       with renk_ole
          .Range(hbh1).select
          .Selection.merge
          .Range(hbh2).select
          .Selection.merge
          .Range(hbh5).select
          .Selection.merge
          .Range(hbh8).select
          .Selection.merge
          .Range(hbL1).select
          .Selection.merge
          .Range(hbh1).HorizontalAlignment = 3 
          .Range(hbh2).HorizontalAlignment = 3
          .Range(hbh3).HorizontalAlignment = 3 
          .Range(hbh4).HorizontalAlignment = 2
          .Range(hbh6).HorizontalAlignment = 3 
          .Range(hbh7).HorizontalAlignment = 3
          .Range(hbh9).HorizontalAlignment = 2 
       ENDwith

         erase renk_excel_temp.dbf
           SELECT LEN(ALLTRIM(str(MAX(pack_no)))) as kd FROM exceltemp into dbf renk_excel_temp noconsole
           sele renk_excel_temp
               go top
               zdkd=kd                              
           use
         lk(1)      = iif(zdkd<5,5,zdkd)
         lk(7+cmsl) = iif(zdkd<5,5,zdkd)

            Renk_ole.cells(6,1).value      = '袋号'
            Renk_ole.cells(6,7+cmsl).value = '袋号'

         erase renk_excel_temp.dbf
           SELECT LEN(ALLTRIM(MAX(batch))) as kd FROM exceltemp into dbf renk_excel_temp noconsole
           sele renk_excel_temp
               go top
               zdkd=kd                              
           use
         lk(2)      = iif(zdkd<5,5,zdkd)
         lk(8+cmsl) = iif(zdkd<5,5,zdkd)

            Renk_ole.cells(6,2).value      = '批号'
            Renk_ole.cells(6,8+cmsl).value = '批号'

               zdkd=len(allt(str(ckzs)))
         lk(4+cmsl) = iif(zdkd<8,8,zdkd)
         lk(lszs-1) = iif(zdkd<8,8,zdkd)
         lk(5+cmsl) = iif(zdkd<8,8,zdkd)
         lk(lszs)   = iif(zdkd<8,8,zdkd)

            Renk_ole.cells(6,4+cmsl).value = '件数/箱'
            Renk_ole.cells(6,lszs-1).value = '件数/箱'
            Renk_ole.cells(6,5+cmsl).value = '合计'
            Renk_ole.cells(6,lszs).value   = '合计'

         erase renk_excel_temp.dbf
           SELECT LEN(ALLTRIM(str(MAX(occur_out)))) as kd FROM exceltemp into dbf renk_excel_temp noconsole
           sele renk_excel_temp
               go top
               zdkd=kd                              
           use
         for i = 1 to cmsl
           lk(3+i)      = iif(zdkd<5,5,zdkd)
           lk(9+cmsl+i) = iif(zdkd<5,5,zdkd)
         endfor

         erase renk_excel_temp.dbf
           if .not. used('tincts')
              sele 0
              use tincts ALIAS tincts
           endif
           SELECT MAX(LEN(ALLTRIM(tinct_name))) as kd from tincts into dbf renk_excel_temp noconsole
           sele renk_excel_temp
               go top
               zdkd=kd                              
           use

         erase renk_excel_temp.dbf
           sele tincts
           use
             lk(3)      = iif(zdkd<5,5,zdkd)
             lk(9+cmsl) = iif(zdkd<5,5,zdkd)

            Renk_ole.cells(6,3).value      = '颜色'
            Renk_ole.cells(6,9+cmsl).value = '颜色'

              for i=1 to 5+cmsl
                   renk_ole.ActiveSheet.Columns(chr(64+i)).ColumnWidth      = lk(i)
              endfor

                   renk_ole.ActiveSheet.Columns(chr(64+6+cmsl)).ColumnWidth = 1

              for i=7+cmsl to lszs
                   renk_ole.ActiveSheet.Columns(chr(64+i)).ColumnWidth      = lk(i)
              endfor

local hbpage,hbpagebefore,hbdate,hbguest,hbtraffic,hbhandle,hbguest_qz,qz_begin

        hbpagebefore = 'A3:'+chr(64+lszs-3)+'3'
        hbpage       = chr(64+lszs-2)+'3:'+chr(64+lszs)+'3'
        hbguest      = 'A4:D4'
        hbtraffic    = 'E4:'+chr(64+lszs-3)+'4'
        hbdate       = chr(64+lszs-2)+'4:'+chr(64+lszs)+'4'
            
           if cmsl < 2
                hbhandle   = 'A9:E9'
                hbguest_qz = 'F9:'+'M9'
                qz_begin   = 6
           else
                hbhandle   = 'A9:'+chr(64+lszs-7)+'9'
                hbguest_qz = chr(64+lszs-6)+'9:'+chr(64+lszs)+'9'
                qz_begin   = lszs-6
           endif

       sele exceltemp
            go top

           if .not. used('guest_info')
              sele 0
              use guest_info ALIAS guest_info
           ENDIF
              SELECT guest_info
              LOCATE FOR ALLTRIM(exceltemp.guest_id) = ALLTRIM(guest_id)
              guest_name_temp = ALLTRIM(guest_name)
           
       sele exceltemp
       with renk_ole
          .Range(hbpagebefore).select
          .Selection.merge
          .Range(hbpage).select
          .Selection.merge
          .Range(hbguest).select
          .Selection.merge
          .Range(hbtraffic).select
          .Selection.merge
          .Range(hbdate).select
          .Selection.merge
          .Range(hbhandle).select
          .Selection.merge
          .Range(hbguest_qz).select
          .Selection.merge
          .cells(3,lszs-2).value   = '№:' + LTRI(STR(page_no))
          .cells(4,1).value        = '客户:'+ guest_name_temp
          .cells(4,5).value        = '运输方式:' + ALLT(traffic)
          .cells(4,lszs-2).value   = '日期:'+LEFT(DTOS(DATE()),4)+'年'+SUBSTR(DTOS(DATE()),5,2)+'月'+RIGHT(DTOS(Date()),2)+'日'
          .cells(9,1).value        = '发货人:' + ALLT(handle)
          .cells(9,qz_begin).value = '上列货品如数验收无误,收货人签章:'
       endwith

 IF cmsl > 1
   local hbcm1,hbcm2
         hbcm1 = chr(64+4)+'7:'+chr(64+3+cmsl)+'7'
         hbcm2 = chr(64+10+cmsl)+'7:'+chr(64+9+cmsl*2)+'7'
 ENDIF        

       do while .t.
         do case
            case recc()>10
                    if int(recc()/2) = recc()/2
                              add_hs = recc()/2 -1
                    else
                              add_hs = int(recc()+1)/2 -1
                    endif
            case recc()>1
                    add_hs = recc() - 1
            otherwise
                    exit
         endcase

               for i = 1 to add_hs  

                     IF cmsl > 1
                           with renk_ole
                                .Range(hbcm1).select
                                .Selection.merge
                                .Range(hbcm2).select
                                .Selection.merge
                           endwith
                     ENDIF

                     Renk_ole.ActiveSheet.Rows(7).Insert

                     IF cmsl > 1
                           with renk_ole
                                .Range(hbcm1).select
                                .Selection.merge
                                .Range(hbcm2).select
                                .Selection.merge
                           endwith
                     ENDIF

               endfor
       exit
       enddo

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -