Malicious Office (OOXML) — malware analysis report

Static analysis result for SHA-256 6bd1868c675e1590…

MALICIOUS

Office (OOXML)

146.7 KB Created: 2007-11-01 06:06:06 UTC Authoring application: Microsoft Excel 12.0000 First seen: 2021-06-20
MD5: 7e43d088821918ccaf39696ac20c7845 SHA-1: 5bc3717946e5071db239c718b158c6a2f18cdd75 SHA-256: 6bd1868c675e1590fcf84ca0d20b04fccacb1b52d7b1db5334cd42d3dec8c181
218 Risk Score

Malware Insights

MITRE ATT&CK
T1059.005 Visual Basic T1059.003 Windows Command Shell T1105 Ingress Tool Transfer

This Excel document contains a Workbook_Open macro that utilizes WScript.Shell and cmd.exe to execute arbitrary commands. The macro also contains API calls to wininet.dll, suggesting it attempts to download and execute a second-stage payload from the embedded URL http://belov/sw/FormReciveData.aspx. The presence of these indicators strongly suggests a malicious macro downloader.

Heuristics 8

  • VBA project inside OOXML medium 5 related findings OOXML_VBA
    Document contains a VBA project — VBA macros present
  • WScript.Shell usage critical OLE_VBA_WSCRIPT
    WScript.Shell usage
    Matched line in script
      'access Windows scripting
      Set myWS = CreateObject("WScript.Shell")
      'read key from registry
  • CreateObject call high OLE_VBA_CREATEOBJ
    CreateObject call
    Matched line in script
        postData = "nii" + Chr(13) + "" + Chr(13) + "0" + Chr(13) + "строка1" + Chr(13) + "строка2"
        Set oServerXMLHTTP = CreateObject("Msxml2.ServerXMLHTTP")
        With oServerXMLHTTP
  • cmd.exe reference in VBA high OLE_VBA_CMD
    cmd.exe reference in VBA
    Matched line in script
        cmd.Execute
       'Все закрываем
  • VBA p-code auto-exec with execution tokens high OLE_VBA_PCODE_AUTOEXEC_EXEC
    Compiled VBA/cache stream contains an auto-execution token together with shell/download/object-execution tokens. This catches p-code-only or source-extraction-failure macro documents where visible source is unavailable.
  • Workbook_Open macro low OLE_VBA_WBOPEN
    Workbook_Open macro
    Matched line in script
    Attribute VB_Customizable = True
    Private Sub Workbook_Open()
  • Hidden worksheet (hidden) low OOXML_HIDDEN_SHEET
    Excel workbook contains 1 hidden sheet(s) — hidden sheets are commonly used to conceal macro code, staging data, or intermediate payload construction
  • Embedded URL info EMBEDDED_URL
    One or more URLs were extracted from the document. The URL itself is not a detection — see the per-URL labels for which channel (macro, JS, link annotation, document body, ...) reached each URL.
    URL http://belov/sw/FormReciveData.aspx In document text (OOXML body / shared strings)

Extracted artifacts 19

Files carved from inside the sample during analysis.

FilenameKindSourceSize
macros.bas vba-macro oletools.olevba.extract_macros (decoded VBA source from OOXML) 64251 bytes
SHA-256: cdeff6380b49d80a0542a0621984d955b6770b8fa21cf6338a240343978c4d00
Preview script
First 1,000 lines of the extracted script
Attribute VB_Name = "ЭтаКнига"
Attribute VB_Base = "0{00020819-0000-0000-C000-000000000046}"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = True
Attribute VB_Exposed = True
Attribute VB_TemplateDerived = False
Attribute VB_Customizable = True
Private Sub Workbook_Open()

End Sub

Attribute VB_Name = "Лист1"
Attribute VB_Base = "0{00020820-0000-0000-C000-000000000046}"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = True
Attribute VB_Exposed = True
Attribute VB_TemplateDerived = False
Attribute VB_Customizable = True

Attribute VB_Name = "Module1"
Option Explicit
Public gpaNastrForm As Variant, gpRowNastr As Integer, gpColNastr As Integer
Const cVer = "1.0", colKodForm = "A", colLeftF = "C", colRightF = "D", colResultF = "E", colFormulaHum = "B", _
        xFORMA = 1, yFORMA = 1, xAtr = 4, xTable = 7, yTable = 1, xCol = 15, yCol = 1, xyFormatHead = "A25", xyFormatCell = "A28"
        
Declare Function InternetConnect Lib "wininet.dll" Alias "InternetConnectA" ( _
ByVal hInternetSession As Long, ByVal sServerName As String, _
ByVal nServerPort As Integer, ByVal sUsername As String, _
ByVal sPassword As String, ByVal lService As Long, _
ByVal lFlags As Long, ByVal lContext As Long) As Long

Declare Function InternetOpen Lib "wininet.dll" Alias "InternetOpenA" ( _
ByVal sAgent As String, ByVal lAccessType As Long, _
ByVal sProxyName As String, _
ByVal sProxyBypass As String, ByVal lFlags As Long) As Long

Public Declare Function HttpOpenRequest Lib "wininet.dll" Alias _
      "HttpOpenRequestA" (ByVal hHttpSession As Long, ByVal sVerb As _
      String, ByVal sObjectName As String, ByVal sVersion As String, _
      ByVal sReferer As String, ByVal something As Long, ByVal lFlags _
      As Long, ByVal lContext As Long) As Long
Public Const INTERNET_FLAG_RELOAD = &H80000000

Public Declare Function HttpAddRequestHeaders Lib "wininet.dll" Alias _
      "HttpAddRequestHeadersA" (ByVal hHttpRequest As Long, _
      ByVal sHeaders As String, ByVal lHeadersLength As Long, ByVal _
      lModifiers As Long) As Integer
Public Const HTTP_ADDREQ_FLAG_ADD_IF_NEW = &H10000000
Public Const HTTP_ADDREQ_FLAG_ADD = &H20000000
Public Const HTTP_ADDREQ_FLAG_REPLACE = &H80000000

Public Declare Function HttpSendRequest Lib "wininet.dll" Alias _
      "HttpSendRequestA" (ByVal hHttpRequest As Long, ByVal sHeaders _
      As String, ByVal lHeadersLength As Long, sOptional As String, _
      ByVal lOptionalLength As Long) As Integer
      
Public Declare Function HttpQueryInfo Lib "wininet.dll" _
   Alias "HttpQueryInfoA" (ByVal hHttpRequest As Long, _
   ByVal lInfoLevel As Long, ByRef sBuffer As Any, _
   ByRef lBufferLength As Long, ByRef lIndex As Long) As Integer
Public Const HTTP_QUERY_FLAG_REQUEST_HEADERS = &H80000000

Public Declare Function InternetReadFile Lib "wininet.dll" _
      (ByVal hFile As Long, ByVal sBuffer As String, _
      ByVal lNumberOfBytesToRead As Long, lNumberOfBytesRead As Long) _
      As Integer

Public Declare Function InternetCloseHandle Lib "wininet.dll" _
   (ByVal hInet As Long) As Integer
   
Public Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)

Private m_intDecTab(255) As Integer
Private Const m_strEncTabConst As String = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"

Public Function EncodeStr64(ByRef strInput As String) As String
  Dim i As Long
  Dim j As Integer
  Dim lngLen As Long
  Dim lngQuants As Long
  Dim intIndex As Long
  Dim strOutput As String
  Dim strLast As String
  Dim b(2) As Byte
  
  lngLen = Len(strInput)
  lngQuants = lngLen \ 3
  strOutput = String(lngQuants * 4, " ")

  For i = 0 To lngQuants - vbNull
    For j = 0 To 2
        b(j) = VBA.Asc(VBA.Mid$(strInput, (i * 3) + j + vbNull, vbNull))
    Next

    Mid(strOutput, intIndex + vbNull, 4) = EncodeQuantum(b)
    intIndex = intIndex + 4
  Next

  Select Case lngLen Mod 3
    Case 0
      strLast = vbNullString

    Case 1
      b(0) = VBA.Asc(VBA.Mid$(strInput, lngLen, vbNull))
      b(1) = 0&
      b(2) = 0&
      strLast = EncodeQuantum(b)
      strLast = VBA.Left$(strLast, 2) & "=="

    Case 2
      b(0) = VBA.Asc(VBA.Mid$(strInput, lngLen - vbNull, vbNull))
      b(1) = VBA.Asc(VBA.Mid$(strInput, lngLen, vbNull))
      b(2) = 0&
      strLast = EncodeQuantum(b)
      strLast = VBA.Left(strLast, 3) & "="
      
  End Select

  EncodeStr64 = strOutput & strLast
  
End Function




Public Function DecodeStr64(ByRef strEncoded As String) As String
  Dim d(3)        As Byte
  Dim c           As Byte
  Dim di          As Integer
  Dim i           As Long
  Dim lngLen        As Long
  Dim intIndex      As Long
  
  lngLen = Len(strEncoded)
  DecodeStr64 = String((lngLen \ 4) * 3, " ")
  Call MakeDecTab
  
  For i = vbNull To Len(strEncoded)
    c = VBA.CByte(VBA.Asc(VBA.Mid$(strEncoded, i, vbNull)))
    c = m_intDecTab(c)
  
    If c >= 0& Then
      d(di) = c
      di = di + vbNull

      If di = 4 Then
        Mid$(DecodeStr64, intIndex + vbNull, 3) = DecodeQuantum(d)
        intIndex = intIndex + 3

        If d(3) = 64 Then
          DecodeStr64 = VBA.Left(DecodeStr64, VBA.Len(DecodeStr64) - vbNull)
          intIndex = intIndex - vbNull
            
        End If

        If d(2) = 64 Then
          DecodeStr64 = VBA.Left(DecodeStr64, VBA.Len(DecodeStr64) - vbNull)
          intIndex = intIndex - vbNull
            
        End If
        
        di = 0&
          
      End If
      
    End If
    
  Next
  
End Function




Private Function EncodeQuantum(ByRef b() As Byte) As String
  Dim c As Integer

  c = SHR2(b(0)) And &H3F
  EncodeQuantum = EncodeQuantum & VBA.Mid$(m_strEncTabConst, c + vbNull, vbNull)

  c = SHL4(b(0) And &H3) Or (SHR4(b(1)) And &HF)
  EncodeQuantum = EncodeQuantum & VBA.Mid$(m_strEncTabConst, c + vbNull, vbNull)

  c = SHL2(b(1) And &HF) Or (SHR6(b(2)) And &H3)
  EncodeQuantum = EncodeQuantum & VBA.Mid$(m_strEncTabConst, c + vbNull, vbNull)

  c = b(2) And &H3F
  EncodeQuantum = EncodeQuantum & VBA.Mid$(m_strEncTabConst, c + vbNull, vbNull)
  
End Function




Private Function DecodeQuantum(ByRef d() As Byte) As String
  Dim c As Long

  c = SHL2(d(0)) Or (SHR4(d(1)) And &H3)
  DecodeQuantum = DecodeQuantum & VBA.Chr$(c)

  c = SHL4(d(1) And &HF) Or (SHR2(d(2)) And &HF)
  DecodeQuantum = DecodeQuantum & VBA.Chr$(c)

  c = SHL6(d(2) And &H3) Or d(3)
  DecodeQuantum = DecodeQuantum & VBA.Chr$(c)
    
End Function




Private Function MakeDecTab()
  Dim t As Integer
  Dim c As Integer

  For c = 0 To 255
    m_intDecTab(c) = &HFFF
  Next
  
  For c = VBA.Asc("A") To VBA.Asc("Z")
    m_intDecTab(c) = t
    t = t + vbNull
  Next
  
  For c = VBA.Asc("a") To VBA.Asc("z")
    m_intDecTab(c) = t
    t = t + vbNull
  Next
  
  For c = VBA.Asc("0") To VBA.Asc("9")
    m_intDecTab(c) = t
    t = t + vbNull
  Next


  c = Asc("+")
  m_intDecTab(c) = t
  t = t + vbNull

  c = Asc("/")
  m_intDecTab(c) = t
  t = t + vbNull
  
  c = Asc("=")
  m_intDecTab(c) = t
  
End Function




Private Function SHL2(ByVal bytValue As Byte) As Byte
    SHL2 = (bytValue * &H4) And &HFF
End Function

Private Function SHL4(ByVal bytValue As Byte) As Byte
    SHL4 = (bytValue * &H10) And &HFF
End Function

Private Function SHL6(ByVal bytValue As Byte) As Byte
    SHL6 = (bytValue * &H40) And &HFF
End Function

Private Function SHR2(ByVal bytValue As Byte) As Byte
    SHR2 = bytValue \ &H4
End Function

Private Function SHR4(ByVal bytValue As Byte) As Byte
    SHR4 = bytValue \ &H10
End Function

Private Function SHR6(ByVal bytValue As Byte) As Byte
    SHR6 = bytValue \ &H40

End Function
   
   Function URLEncode(strData)
 Dim i, c, ln: ln = Len(strData)
 For i = 1 To ln
   c = Asc(Mid(strData, i, 1))
   If c = 32 Then
      URLEncode = URLEncode & "+"
   ElseIf (c >= 48 And c <= 57) Or (c >= 65 And c <= 90) Or (c >= 97 And c <= 122) Or c = 61 Or c = 38 Then
      URLEncode = URLEncode & Chr(c)
   Else
      c = Hex(c): If Len(c) < 2 Then c = "0" & c
      URLEncode = URLEncode & "%" & c
   End If
 NextEncodeBase64EncodeBase64EncodeBase64
End Function

Private Sub Send_Report()
Dim hInternet As Long, hSession As Long, hINetSession As Long, req As String, hFile As Long, iRes As Long
Dim bDoLoop As Boolean
Dim sReadBuffer As String * 2048
Dim lNumberOfBytesRead As Long
Dim sBuffer As String, postData As String, oServerXMLHTTP As Variant

    postData = "nii" + Chr(13) + "" + Chr(13) + "0" + Chr(13) + "строка1" + Chr(13) + "строка2"
    Set oServerXMLHTTP = CreateObject("Msxml2.ServerXMLHTTP")
    With oServerXMLHTTP
        '.Open "POST", "http://belov/sw/FormReciveData.aspx", False
        '.setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
        '.send URLEncode(postData)
        'send "" + (postData)
        .Open "POST", "http://belov/sw/FormReciveData.aspx", False
        .setRequestHeader "Content-Type", "application/x-www-form-urlencoded; charset=windows-1251"
        .send postData + ""
    End With
    
'    hINetSession = InternetOpen("Excel - Client", 0, vbNullString, vbNullString, 0)
'    hSession = InternetConnect(hINetSession, "belov", 80, "", "", 3, 0, 0)
'    hFile = HttpOpenRequest(hSession, "POST", "/sw/FormReciveData.aspx", vbNullString, vbNullString, 0, INTERNET_FLAG_RELOAD, 0)
'    iRes = HttpAddRequestHeaders(hFile, req, Len(req), HTTP_ADDREQ_FLAG_ADD)
'    req = "Connection: Keep-Alive"
'    iRes = HttpAddRequestHeaders(hFile, req, Len(req), HTTP_ADDREQ_FLAG_ADD)

'    postData = "name=nii" + Chr(13) + "pass=" + Chr(13) + "DATA=строка1" + Chr(13) + "строка2"
'    iRes = HttpSendRequest(hFile, vbNullString, 0, (postData), Len(postData))
    
'    bDoLoop = True
'    While bDoLoop
'    sReadBuffer = vbNullString
'    bDoLoop = InternetReadFile(hFile, sReadBuffer, Len(sReadBuffer), lNumberOfBytesRead)
'    sBuffer = sBuffer & Left$(sReadBuffer, lNumberOfBytesRead)
    
'    If Not CBool(lNumberOfBytesRead) Then bDoLoop = False
'    Wend
    
'    InternetCloseHandle (hFile)
'    InternetCloseHandle (hSession)
'    InternetCloseHandle (hINetSession)
    MsgBox (oServerXMLHTTP.Status)
    iRes = MsgBox(oServerXMLHTTP.ResponseText)
End Sub

        
Function LastCell(r As Range) As Range
Dim rLast As Range
    Set rLast = r.Cells.SpecialCells(xlLastCell)
    If rLast.Cells(1, 1).Value = "" Then
        On Error Resume Next
        Set LastCell = r.Parent.Cells(r.Parent.Cells.Find("*", rLast, , , xlByRows, xlPrevious).Row, r.Parent.Cells.Find("*", rLast, , , xlByColumns, xlPrevious).Column)
        If Err.Number <> 0 Then Set LastCell = r.Parent.Cells(1, 1)
        On Error GoTo 0
    Else
        Set LastCell = rLast
    End If
    Set rLast = Nothing
End Function


Function getLastRow(cSheet As String, cCol As Integer) As Integer
    Dim iRow As Integer
    Const iMaxRow = 65536
    'getLastRow = Columns(ccol).Rows(65536).End(xlUp).Row
      With Worksheets(cSheet).Cells(iMaxRow, cCol)
     If IsEmpty(.Value) = True Then
        iRow = .End(xlUp).Row
     Else
        iRow = iMaxRow
     End If
     getLastRow = iRow
End With
End Function

Function GetWordNum(st As String, index As Integer, cdecim As String) As String
    Dim i As Double, cnt As Double, ipos As Double, ibegin As Double, iend As Double
    i = 1
    cnt = 0
    ibegin = 0
    iend = 0
    ipos = InStr(i, st, cdecim)
    While ipos > 0 And cnt <= index + 1
        ipos = InStr(i, st, cdecim)
        If ipos > 0 Then
        If ipos > 0 Then cnt = cnt + 1
        If cnt = index - 1 Then ibegin = ipos + Len(cdecim)
        If (index = 1 And cnt = 1) Then ibegin = 1
        If cnt = index Then iend = ipos
        End If
        i = ipos + 1
    Wend
    GetWordNum = ""
    If ipos = 0 And cnt = 0 And index = 1 Then GetWordNum = st
    If ibegin > 0 Then
       If iend = 0 Then iend = Len(st) + 1
       GetWordNum = Mid(st, ibegin, iend - ibegin)
    End If
End Function

Function GetWordCount(st As String, cdecim As String) As Integer
    Dim i As Double, cnt As Double, ipos As Double, ibegin As Double, iend As Double
    i = 1
    cnt = 0
    ibegin = 0
    iend = 0
    ipos = InStr(i, st, cdecim)
    While ipos > 0
        ipos = InStr(i, st, cdecim)
        If ipos > 0 Then
        If ipos > 0 Then cnt = cnt + 1
        End If
        i = ipos + 1
     Wend
     GetWordCount = cnt + 1
End Function
Private Sub Make_Report_run(cPath As String, cWeb As String, cUser As String)
        Worksheets("System").Cells(16, 2).Value = cUser
        Worksheets("System").Cells(17, 2).Value = cWeb
        Make_Report (cPath)
End Sub

Private Sub Make_Report_Svod_ks(cPath As String, cServer As String, cBase As String, cUser As String)
        Worksheets("System").Cells(16, 2).Value = cUser
        Worksheets("System").Cells(22, 2).Value = cServer
        Worksheets("System").Cells(23, 2).Value = cBase
        Make_Report (cPath)
End Sub

Private Sub Make_Report_run1()
        Make_Report ("D:\smeta\Excel\test.txt")
End Sub



Private Sub Make_Report(FileName As String)

    Dim hFile As Long, cFileName As String, TextLine As String, _
     lHeader As Integer, cVersion As String, lcError As String, Response As Integer, _
     aHeader As Variant, cCode_Form As String, lcBegin As String, lcEnd As String, cDate_Form As String, _
     cDep_Code As String, cOrg_Name As String, cBUDG As String, cBUDG_NAME As String, _
     liCountTable As Integer, cCount_Table As String, liCountCol As Integer, i As Integer, liCol As Integer, _
     lcVal_Len As String, lcRow As String, iRow As Integer, li As Integer, aCols As Variant, iCols As Integer, _
     lcExport_order As String, cNAME_Form As String, max_row As Integer, rgb_value As String, code_col As Integer, _
     code As String, find_range As Range, Property_col As String, liCountAtr As Integer
     
    Close #1
    On Error Resume Next
        Application.DisplayAlerts = False
    cFileName = FileName
        If Dir(cFileName) <> "" Then
            ' Открываем файл для последовательного доступа.
        Open cFileName For Input Access Read As #1
        lHeader = 0
        lcError = ""
        liCountTable = 0
        liCountCol = 0
        liCol = 1
        liCountAtr = 0
        Property_col = "0"
        Worksheets("System").Range("C2:Z1000").Value = ""
        Worksheets("System").Range("B2:B15").Value = ""
        Worksheets("System").Range("D2:D15").Value = ""
        Worksheets("Реквизиты").Unprotect
        For i = 3 To Sheets.Count
            Sheets(3).Delete
        Next
        Do While Not EOF(1)    ' Loop until end of file.
          Line Input #1, TextLine    ' Read line into variable.
          'проверяем версию файла
          'читаем заголовок
          If Trim(TextLine) = "PROGRAM=Excel_Client" Then
             lHeader = lHeader + 1
          End If
          If GetWordNum(TextLine, 1, "=") = "VERSION" Then
             cVersion = GetWordNum(TextLine, 2, "=")
             If cVersion = cVer Then
                lHeader = lHeader + 1
             Else
                lcError = "Неверная версия: " + cVersion + ". Ожидается версия: " + cVer
             End If
          End If
                      
          'если заголовок прочитан и он верный
          If lHeader = 2 Then
              
            'начало блока
              If Left(Trim(TextLine), 1) = "[" Then
                lcBegin = Trim(TextLine)
                lcEnd = ""
              End If
              
            'конец блока
              If Trim(TextLine) = "##" Then
                lcEnd = "END"
              End If
                                    
            Select Case lcBegin
              'блок описания формы
                Case "[FORM]"
                    Select Case GetWordNum(TextLine, 1, "=")
                        Case "CODE_FORM"
                          cCode_Form = Trim(GetWordNum(TextLine, 2, "="))
                          Worksheets("System").Cells(2, 2).Value = Trim(GetWordNum(TextLine, 2, "="))
                        Case "NAME_FORM"
                          cNAME_Form = Trim(GetWordNum(TextLine, 2, "="))
                          Worksheets("System").Cells(3, 2).Value = Trim(GetWordNum(TextLine, 2, "="))
                       
                        Case "DATE_FORM"
                          cDate_Form = Trim(GetWordNum(TextLine, 2, "="))
                          Worksheets("System").Cells(4, 2).Value = Trim(GetWordNum(TextLine, 2, "="))
                        Case "DEP_CODE"
                          cDep_Code = Trim(GetWordNum(TextLine, 2, "="))
                          Worksheets("System").Cells(5, 2).Value = Trim(GetWordNum(TextLine, 2, "="))
                        Case "ORG_NAME"
                          cOrg_Name = Trim(GetWordNum(TextLine, 2, "="))
                          Worksheets("System").Cells(6, 2).Value = Trim(GetWordNum(TextLine, 2, "="))
                        Case "BUDG"
                          cBUDG = Trim(GetWordNum(TextLine, 2, "="))
                          Worksheets("System").Cells(7, 2).Value = Trim(GetWordNum(TextLine, 2, "="))
                        Case "BUDG_NAME"
                          cBUDG_NAME = Trim(GetWordNum(TextLine, 2, "="))
                          Worksheets("System").Cells(8, 2).Value = Trim(GetWordNum(TextLine, 2, "="))
                        Case "BEGIN_DATE"
                          Worksheets("System").Cells(12, 2).Value = Trim(GetWordNum(TextLine, 2, "="))
                        Case "PERIOD_TYPE"
                          Worksheets("System").Cells(13, 2).Value = Trim(GetWordNum(TextLine, 2, "="))
                        Case "VERSION_FORM"
                          Worksheets("System").Cells(19, 2).Value = Trim(GetWordNum(TextLine, 2, "="))
                        Case "PERIOD_NUMBER"
                          Worksheets("System").Cells(14, 2).Value = Trim(GetWordNum(TextLine, 2, "="))
                    
                    End Select
               'блок описания таблиц
                Case "[TABLE]"
                    Select Case GetWordNum(TextLine, 1, "=")
                        Case "#@"
                          liCountTable = liCountTable + 1
                          Sheets.Add After:=Worksheets(Sheets.Count)
                          Worksheets(Sheets.Count).name = "Таблица " + Str(liCountTable)
                        Case "COUNT_TABLE"
                          cCount_Table = Trim(GetWordNum(TextLine, 2, "="))
                          Worksheets("System").Cells(yTable + 1, xTable).Value = "COUNT_TABLE"
                          Worksheets("System").Cells(yTable + 1, xTable + 1).Value = cCount_Table
                        Case "ORDERS"
                          Worksheets("System").Cells(yTable + liCountTable, xTable + 2).Value = Trim(GetWordNum(TextLine, 2, "="))
                        Case "NAME"
                          Worksheets("System").Cells(yTable + liCountTable, xTable + 3).Value = Trim(GetWordNum(TextLine, 2, "="))
                          Worksheets(liCountTable + 2).Cells(1, 1).Value = Trim(GetWordNum(TextLine, 2, "="))
                        Case "COUNT_COL"
                          Worksheets("System").Cells(yTable + liCountTable, xTable + 4).Value = Trim(GetWordNum(TextLine, 2, "="))
                        Case "VAL_TYPE"
                          Worksheets("System").Cells(yTable + liCountTable, xTable + 6).Value = Trim(GetWordNum(TextLine, 2, "="))
                        Case "CODE_COL"
                          Worksheets("System").Cells(yTable + liCountTable, xTable + 5).Value = Trim(GetWordNum(TextLine, 2, "="))
                          
                          With Worksheets(Worksheets("System").Cells(yTable + liCountTable, xTable + 2).Value + 2)
                           ' .Range(Cells(5, Val(Trim(GetWordNum(TextLine, 2, "="))) + 1), Cells(5, Val(Trim(GetWordNum(TextLine, 2, "="))) + 1)).Select
                            .Range(Cells(5, 1), Cells(5, 1)).Select
                            .Activate
                            ActiveWindow.FreezePanes = True
                          End With
                    End Select
               'блок описания колонок
                Case "[COLS]"
                    Select Case GetWordNum(TextLine, 1, "=")
                        Case "##"
                          liCountCol = liCountCol + 1
                        Case "#@"
                          liCountCol = liCountCol + 1
                        Case "TABLE"
                          Worksheets("System").Cells(yCol + liCountCol, xCol + 2).Value = Trim(GetWordNum(TextLine, 2, "="))
                          liCountTable = Val(Trim(GetWordNum(TextLine, 2, "=")))
                            
                        Case "ORDERS"
                          Worksheets("System").Cells(yCol + liCountCol, xCol + 3).Value = Trim(GetWordNum(TextLine, 2, "="))
                          liCol = Trim(GetWordNum(TextLine, 2, "="))
                        Case "NAME"
                          Worksheets("System").Range(xyFormatHead).Copy Worksheets(liCountTable + 2).Cells(3, liCol)
                          Worksheets("System").Range(xyFormatHead).Copy Worksheets(liCountTable + 2).Cells(4, liCol)
                          Worksheets("System").Cells(yCol + liCountCol, xCol + 4).Value = Trim(GetWordNum(TextLine, 2, "="))
                          Worksheets(liCountTable + 2).Cells(3, liCol).Value = Trim(GetWordNum(TextLine, 2, "="))
                          'установка ширины колонки
                        Case "INPUT_MASK"
                          Worksheets("System").Cells(yCol + liCountCol, xCol + 5).Value = Trim(GetWordNum(TextLine, 2, "="))
                        Case "EDIT"
                          Worksheets("System").Cells(yCol + liCountCol, xCol + 6).Value = Trim(GetWordNum(TextLine, 2, "="))
                        Case "VAL_LEN"
                          Worksheets("System").Cells(yCol + liCountCol, xCol + 7).Value = Trim(GetWordNum(TextLine, 2, "="))
                          lcVal_Len = Trim(GetWordNum(TextLine, 2, "="))
                        Case "COL_TYPE"
                          Worksheets("System").Cells(yCol + liCountCol, xCol + 8).Value = Trim(GetWordNum(TextLine, 2, "="))
                          If Trim(GetWordNum(TextLine, 2, "=")) = "0" Then
                            Worksheets(liCountTable + 2).Columns(liCol).ColumnWidth = 20
                            Worksheets(liCountTable + 2).Columns(liCol).NumberFormat = "0.00"
                            If Val(lcVal_Len) > 0 Then
                                Worksheets(liCountTable + 2).Columns(liCol).NumberFormat = "0." + Application.WorksheetFunction.Rept("0", Val(lcVal_Len))
                            Else
                                Worksheets(liCountTable + 2).Columns(liCol).NumberFormat = "0"
                            End If
                          End If
                           'проставим ширину колонок
                          If Trim(GetWordNum(TextLine, 2, "=")) = "1" Then
                            If lcVal_Len <> "0" And lcVal_Len <> "" Then
                                If Val(lcVal_Len) > 50 Then
                                    lcVal_Len = "50"
                                End If
                                If Val(lcVal_Len) < 6 Then
                                    lcVal_Len = "6"
                                End If
                                Worksheets(liCountTable + 2).Columns(liCol).ColumnWidth = Val(lcVal_Len)
                            Else
                                Worksheets(liCountTable + 2).Columns(liCol).ColumnWidth = 20
                            End If
                                Worksheets(liCountTable + 2).Columns(liCol).NumberFormat = "@"
                          End If
                                Worksheets(liCountTable + 2).Rows(3).AutoFit
                          Worksheets(liCountTable + 2).Rows(4).NumberFormat = "@"
                             
                          
                        Case "EXPORT_ORDER"
                          lcExport_order = Trim(GetWordNum(TextLine, 2, "="))
                          Worksheets("System").Cells(yCol + liCountCol, xCol + 9).Value = lcExport_order
                          If lcExport_order <> "0" Then
                            Worksheets(liCountTable + 2).Cells(4, liCol).Value = lcExport_order
                          End If
                        Case "PROPERTY"
                          Worksheets("System").Cells(yCol + liCountCol, xCol + 10).Value = Trim(GetWordNum(TextLine, 2, "="))
                          Property_col = Trim(GetWordNum(TextLine, 2, "="))
                          If Property_col <> "0" Then
                             If (Val(Property_col) And 1) = 1 Then
                                Worksheets(liCountTable + 2).Columns(liCol).ColumnWidth = 0.08
                                Worksheets(liCountTable + 2).Columns(liCol).HorizontalAlignment = xlFill
                             End If
                          End If
                    End Select
                'Атрибуты
                Case "[ATRIBUT]"
                    Select Case GetWordNum(TextLine, 1, "=")
                    Case "[ATRIBUT]"
                          liCountAtr = 0
                    Case "#@"
                          liCountAtr = liCountAtr + 1
                          'рисуем атрибут начиная с ячейки С
                          Worksheets("Реквизиты").Cells(24, 2 + liCountAtr).Borders(xlEdgeLeft).LineStyle = xlContinuous
                          Worksheets("Реквизиты").Cells(24, 2 + liCountAtr).Borders(xlEdgeLeft).Weight = xlMedium
                          
                          Worksheets("Реквизиты").Cells(24, 2 + liCountAtr).Borders(xlEdgeTop).LineStyle = xlContinuous
                          Worksheets("Реквизиты").Cells(24, 2 + liCountAtr).Borders(xlEdgeTop).Weight = xlMedium
                
                          Worksheets("Реквизиты").Cells(24, 2 + liCountAtr).Borders(xlEdgeBottom).LineStyle = xlContinuous
                          Worksheets("Реквизиты").Cells(24, 2 + liCountAtr).Borders(xlEdgeBottom).Weight = xlMedium
                
                          Worksheets("Реквизиты").Cells(24, 2 + liCountAtr).Borders(xlEdgeRight).LineStyle = xlContinuous
                          Worksheets("Реквизиты").Cells(24, 2 + liCountAtr).Borders(xlEdgeRight).Weight = xlMedium
                          Worksheets("Реквизиты").Cells(24, 2 + liCountAtr).Interior.ColorIndex = 15
                          Worksheets("Реквизиты").Cells(24, 2 + liCountAtr).Interior.Pattern = xlSolid
                          
                          Worksheets("Реквизиты").Cells(25, 2 + liCountAtr).Borders(xlEdgeLeft).LineStyle = xlContinuous
                          Worksheets("Реквизиты").Cells(25, 2 + liCountAtr).Borders(xlEdgeLeft).Weight = xlMedium
                          
                          Worksheets("Реквизиты").Cells(25, 2 + liCountAtr).Borders(xlEdgeTop).LineStyle = xlContinuous
                          Worksheets("Реквизиты").Cells(25, 2 + liCountAtr).Borders(xlEdgeTop).Weight = xlMedium
                
                          Worksheets("Реквизиты").Cells(25, 2 + liCountAtr).Borders(xlEdgeBottom).LineStyle = xlContinuous
                          Worksheets("Реквизиты").Cells(25, 2 + liCountAtr).Borders(xlEdgeBottom).Weight = xlMedium
                
                          Worksheets("Реквизиты").Cells(25, 2 + liCountAtr).Borders(xlEdgeRight).LineStyle = xlContinuous
                          Worksheets("Реквизиты").Cells(25, 2 + liCountAtr).Borders(xlEdgeRight).Weight = xlMedium
                    Case "CODE_ATR"
                          Worksheets("System").Cells(1 + liCountAtr, 4).Value = Trim(GetWordNum(TextLine, 2, "="))
                          Worksheets("System").Cells(1 + liCountAtr, 5).Value = liCountAtr
                    Case "NAME_ATR"
                          Worksheets("Реквизиты").Cells(24, 2 + liCountAtr).Value = Trim(GetWordNum(TextLine, 2, "="))
                    Case "STR_VAL"
                          Worksheets("Реквизиты").Cells(25, 2 + liCountAtr).Value = Trim(GetWordNum(TextLine, 2, "="))
                          Worksheets("Реквизиты").Cells(25, 2 + liCountAtr).Locked = False
                          'Worksheets("Реквизиты").Rows(2 + liCountAtr).AutoFit
                End Select
                'данные
                Case "[DATA]"
                    Select Case GetWordNum(TextLine, 1, "=")
                        Case "[DATA]"
                          liCountTable = 0
                          iRow = 0
                        Case "#@"
                          If iRow <> 0 And liCountTable <> 0 Then
                           li = SetFormatCells(iRow + 5, iCols, liCountTable + 2)
                          End If
                          liCountTable = liCountTable + 1
                          iRow = 0
                        Case "ROW"
                           If Len(TextLine) > 4 Then
                            lcRow = Right(TextLine, Len(TextLine) - 4)
                           Else
                            lcRow = ""
                           End If
                           iCols = GetWordCount(lcRow, "|")
                           For li = 1 To GetWordCount(lcRow, "|")
                               Worksheets(liCountTable + 2).Cells(iRow + 5, li).Value = Trim(GetWordNum(lcRow, li, "|"))
                               Application.StatusBar = "Подождите ...  Идет форматирование данных ... Таблица №" + Str(liCountTable) + ". Строка №" + Str(iRow)
                           
                           Next
                           iRow = iRow + 1
                        Case "RGB"
                           If Len(TextLine) > 4 Then
                            lcRow = Right(TextLine, Len(TextLine) - 4)
                           Else
                            lcRow = ""
                           End If
                           code_col = Worksheets("System").Cells(liCountTable + 1, 12).Value
                           code = GetWordNum(lcRow, 1, "|")
                           Worksheets(liCountTable + 2).Activate
                           max_row = getLastRow("Таблица " + Str(liCountTable), code_col)
                           With Range(Cells(5, code_col), Cells(max_row, code_col))
                            Set find_range = .Find(code, LookIn:=xlValues, LookAt:=xlWhole)
                            If Not find_range Is Nothing Then
                                For li = 2 To GetWordCount(lcRow, "|")
                                    rgb_value = GetWordNum(lcRow, li, "|")
                                    Worksheets(liCountTable + 2).Cells(find_range.Row, li - 1).Interior.Color = Val(rgb_value)
                                Next
                            End If
                           End With
                    
                    End Select
            
            End Select
          End If
          If lcError <> "" Then
            Response = MsgBox("Ошибка:" + lcError, vbInformation)
            Exit Do
          End If
        Loop
    ' Закрываем файл.
    Close #1
    
        Else
            Response = MsgBox("Файл " + cFileName + " не найден!", vbInformation)
        End If
    If iRow <> 0 And iCols <> 0 And liCountTable <> 0 Then
        li = SetFormatCells(iRow + 5, iCols, liCountTable + 2)
    End If
    'Worksheets(2).Cells(1, 1).Value = "Код отчета: " + Worksheets("System").Cells(2, 2).Value + " Наименование: " + Worksheets("System").Cells(3, 2).Value
    'проставляем периоды
      Worksheets("System").Cells(9, 2).Value = GetWordNum(Worksheets("System").Cells(12, 2).Value, 3, ".")
      Worksheets("System").Cells(10, 2).Value = 1
      Worksheets("System").Cells(11, 2).Value = 1
     Select Case Worksheets("System").Cells(13, 2).Value
         Case 1 'год
            Worksheets("Реквизиты").Opt_Y.Value = True
         Case 2 'квартал
            Worksheets("System").Cells(10, 2).Value = Worksheets("System").Cells(14, 2).Value
            Worksheets("Реквизиты").Opt_Q.Value = True
         Case 4 'месяц
            Worksheets("System").Cells(11, 2).Value = Worksheets("System").Cells(14, 2).Value
            Worksheets("Реквизиты").Opt_M.Value = True
     End Select
    Worksheets("Реквизиты").Activate
    Worksheets("Реквизиты").Unprotect
    'удаляем реквизиты
    If liCountAtr = 0 Then
       Worksheets("Реквизиты").Range("C24:C25").EntireRow.Delete
    End If
    Worksheets("Реквизиты").Cells(2, 2).Formula = "Форма:" + Worksheets("System").Cells(2, 2).Value + " " + Worksheets("System").Cells(3, 2).Value
    Worksheets("Реквизиты").Protect DrawingObjects:=True, Contents:=True, Scenarios:=True
    Worksheets("Реквизиты").EnableSelection = xlUnlockedCells
    Application.StatusBar = ""
    'Response = MsgBox("Обновление завершено!", vbInformation)
    Application.DisplayAlerts = True

End Sub

Function SetFormatCells(iRow As Integer, iCols As Integer, iSheet As Integer) As Integer
    Dim x As Integer, y As Integer
    x = 5
    y = 1
    Worksheets(iSheet).Activate
'    With Range(Cells(x, y), Cells(iRow, iCols))
'        .HorizontalAlignment = xlRight
'        .VerticalAlignment = xlBottom
'        .WrapText = True
'    End With
    With Range(Cells(x, y), Cells(iRow, iCols)).Borders(xlEdgeLeft)
        .LineStyle = xlContinuous
        .Weight = xlThin
        .ColorIndex = xlAutomatic
    End With
    With Range(Cells(x, y), Cells(iRow, iCols)).Borders(xlEdgeTop)
        .LineStyle = xlContinuous
        .Weight = xlMedium
        .ColorIndex = xlAutomatic
    End With
    With Range(Cells(x, y), Cells(iRow, iCols)).Borders(xlEdgeBottom)
        .LineStyle = xlContinuous
        .Weight = xlThin
        .ColorIndex = xlAutomatic
    End With
    With Range(Cells(x, y), Cells(iRow, iCols)).Borders(xlEdgeRight)
        .LineStyle = xlContinuous
        .Weight = xlThin
        .ColorIndex = xlAutomatic
    End With
    With Range(Cells(x, y), Cells(iRow, iCols)).Borders(xlInsideVertical)
        .LineStyle = xlContinuous
        .Weight = xlThin
        .ColorIndex = xlAutomatic
    End With
    With Range(Cells(x, y), Cells(iRow, iCols)).Borders(xlInsideHorizontal)
        .LineStyle = xlContinuous
        .Weight = xlThin
        .ColorIndex = xlAutomatic
    End With

End Function

Function listexists(name As String) As Boolean
Dim obj As Object
On Error Resume Next
Set obj = Sheets(name)
listexists = (Err.Number = 0)
End Function

Function Get_Report(saveNull As Boolean, pNewVers As Boolean, sendCRC As Boolean) As String
Dim max_tmp As Integer, limax As Integer, cCol As String, ctext As String, MaxRow As Integer, CountTable As Integer, ColCount As Integer, ColTable As Integer, li As Integer, lj As Integer, ColCode As Integer, lij As Integer, crow As String, a As DataObject, liAtr As Integer, yColTable As Integer, cRows As String, isNull As Boolean, cValue As String, crc As Long, onlytext As Integer
    crc = 0
    ctext = ""
    'формируем заголовок
    cCol = "B"
    ctext = ctext + "PROGRAM = Excel_Client" + Chr(13) + Chr(10)
    ctext = ctext + "VERSION=1.2" + Chr(13) + Chr(10)
    ctext = ctext + "DATE=" + CStr(Date) + " " + CStr(Time) + Chr(13) + Chr(10)
    ctext = ctext + "USER=" + Worksheets("System").Range(cCol + "16").Value + Chr(13) + Chr(10)
    'формируем заголовок формы
    ctext = ctext + "##" + Chr(13) + Chr(10)
    ctext = ctext + "[FORM]" + Chr(13) + Chr(10)
    ctext = ctext + "CODE_FORM=" + CStr(Worksheets("System").Range(cCol + "2").Value) + Chr(13) + Chr(10)
    ctext = ctext + "DATE_FORM=" + CStr(Worksheets("System").Range(cCol + "4").Value) + Chr(13) + Chr(10)
    ctext = ctext + "DEP_CODE=" + CStr(Worksheets("System").Range(cCol + "5").Value) + Chr(13) + Chr(10)
    ctext = ctext + "BUDG=" + CStr(Worksheets("System").Range(cCol + "7").Value) + Chr(13) + Chr(10)
    ctext = ctext + "YEAR=" + CStr(Worksheets("System").Range(cCol + "9").Value) + Chr(13) + Chr(10)
    ctext = ctext + "PERIOD=" + CStr(Worksheets("System").Range(cCol + "13").Value) + Chr(13) + Chr(10)
    If Worksheets("System").Range(cCol + "13").Value = 2 Then
        ctext = ctext + "PERIOD_NUM=" + CStr(Worksheets("System").Range(cCol + "10").Value) + Chr(13) + Chr(10)
    Else
        ctext = ctext + "PERIOD_NUM=" + CStr(Worksheets("System").Range(cCol + "11").Value) + Chr(13) + Chr(10)
    End If
    ctext = ctext + "VERSION_FORM=" + CStr(Worksheets("System").Range(cCol + "19").Value) + Chr(13) + Chr(10)
    If pNewVers = True Then
        ctext = ctext + "NEW_VERSION=1" + Chr(13) + Chr(10)
    End If
    
    'атрибуты
    liAtr = 2
    ctext = ctext + "[ATRIBUTS]" + Chr(13) + Chr(10)
    While CStr(Worksheets("System").Cells(liAtr, 4).Value) <> ""
        ctext = ctext + CStr(Worksheets("System").Cells(liAtr, 4).Value) + "=" + Trim(CStr(Worksheets("Реквизиты").Cells(25, 1 + liAtr).Value)) + Chr(13) + Chr(10)
        liAtr = liAtr + 1
    Wend
    ctext = ctext + "##" + Chr(13) + Chr(10)
    'данные
    CountTable = Val(Worksheets("System").Range("H2").Value)
    For li = 1 To CountTable
        yColTable = 2
        While Val(Worksheets("System").Cells(yColTable, 17).Value) <> li
            yColTable = yColTable + 1
        Wend
                    
        ColCode = Val(Worksheets("System").Range("L" + CStr(li + 1)).Value)
        max_tmp = 0
        
        'проверим существует ли лист
        If listexists("Таблица " + Str(li)) = False Then
            MsgBox ("Сохранение прервано. Не найден лист: " + "Таблица " + Str(li))
            Get_Report = "-1"
            Exit Function
        End If
        For limax = 1 To ColCode
            MaxRow = getLastRow("Таблица " + Str(li), limax)
            If max_tmp < MaxRow Then
                max_tmp = MaxRow
            End If
        Next
        MaxRow = max_tmp
        ctext = ctext + "ТБ=" + CStr(li) + Chr(13) + Chr(10)
        ColCount = Val(Worksheets("System").Range("K" + CStr(li + 1)).Value)
        
        onlytext = 1
        For lij = 1 To ColCount
                If Val(Worksheets("System").Cells(yColTable + lij - 1, 23).Value) = 0 Then
                    onlytext = 0
                End If
            Next
        
        For lj = 5 To MaxRow
            crow = "ROW" + CStr(li) + "="
            isNull = True
            For lij = 1 To ColCount
                If Val(Worksheets("System").Cells(yColTable + lij - 1, 23).Value) = 0 Then
                    'cValue = CStr(Val(Replace(CStr(Worksheets("Таблица " + Str(li)).Cells(lj, lij).Value), ",", ".")))
                    cValue = CStr(Val(Replace(Replace(CStr(Worksheets("Таблица " + Str(li)).Cells(lj, lij).Value), ",", "."), Chr(160), "")))
                    crow = crow + cValue + "|"
                    If saveNull = False And cValue <> "0" Then
                         isNull = False
                    End If
                Else
                    crow = crow + Replace(CStr(Worksheets("Таблица " + Str(li)).Cells(lj, lij).Value), "'", """") + "|"
                End If
            Next
            
            If onlytext = 1 Then
                isNull = False
            End If
            
            crow = (Replace(crow, "+", "#plus#"))
            crow = (Replace(crow, Chr(10), ""))
            crow = (Replace(crow, Chr(13), ""))
            
             If saveNull = False And isNull = False Then
                crc = crc16(crow, crc)
                ctext = ctext + crow + Chr(13) + Chr(10)
            End If
            If saveNull = True Then
                crc = crc16(crow, crc)
                ctext = ctext + crow + Chr(13) + Chr(10)
            End If
        Next
    Next
    If sendCRC = True Then
        ctext = ctext + "CRC=" + Str(crc)
    End If
   ' Open "D:\SMETA\EXCEL\out.txt" For Output As #1
   ' Print #1, cText
   ' Close #1
    Get_Report = ctext
End Function


Public Function uiShiftRightBy8(x As Integer) As Integer
    ' Shift 16-bit integer value to right by 8 bits
    ' Avoiding problem with sign bit
    Dim iNew As Integer
    iNew = (x And &H7FFF) \ 256
    If (x And &H8000) <> 0 Then
        iNew = iNew Or &H80
    End If
    uiShiftRightBy8 = iNew
End Function

Public Function crc16(pcstr As String, piCrc As Long) As Long
Dim aCRC(256) As Long
aCRC(0) = 0
aCRC(1) = 4129
aCRC(2) = 8258
aCRC(3) = 12387
aCRC(4) = 16516
aCRC(5) = 20645
aCRC(6) = 24774
aCRC(7) = 28903
aCRC(8) = 33032
aCRC(9) = 37161
aCRC(10) = 41290
aCRC(11) = 45419
aCRC(12) = 49548
aCRC(13) = 53677
aCRC(14) = 57806
aCRC(15) = 61935
aCRC(16) = 4657
aCRC(17) = 528
aCRC(18) = 12915
aCRC(19) = 8786
aCRC(20) = 21173
aCRC(21) = 17044
aCRC(22) = 29431
aCRC(23) = 25302
aCRC(24) = 37689
aCRC(25) = 33560
aCRC(26) = 45947
aCRC(27) = 41818
aCRC(28) = 54205
aCRC(29) = 50076
aCRC(30) = 62463
aCRC(31) = 58334
aCRC(32) = 9314
aCRC(33) = 13379
aCRC(34) = 1056
aCRC(35) = 5121
aCRC(36) = 25830
aCRC(37) = 29895
aCRC(38) = 17572
aCRC(39) = 21637
aCRC(40) = 42346
aCRC(41) = 46411
aCRC(42) = 34088
aCRC(43) = 38153
aCRC(44) = 58862
aCRC(45) = 62927
aCRC(46) = 50604
aCRC(47) = 54669
aCRC(48) = 13907
aCRC(49) = 9842
aCRC(50) = 5649
aCRC(51) = 1584
aCRC(52) = 30423
aCRC(53) = 26358
aCRC(54) = 22165
aCRC(55) = 18100
aCRC(56) = 46939
…
vbaProject_00.bin vba-project OOXML VBA project: xl/vbaProject.bin 205824 bytes
SHA-256: a7cab4f0d1ca8d900847cf68de81dc0f09566d12f72fd2e1ad91ef2678a13edf
emf_00.emf ooxml-emf OOXML EMF part: xl/media/image8.emf 2612 bytes
SHA-256: b6085b83fed201b62c3279fe3ee5f478ba8a4eb7a2dbce749254c4a34dd30b6a
emf_01.emf ooxml-emf OOXML EMF part: xl/media/image9.emf 1296 bytes
SHA-256: 40f62b124151b0f48205cc9a2f49750bfbe70600930a76ad3d49eac860558e16
emf_02.emf ooxml-emf OOXML EMF part: xl/media/image10.emf 2424 bytes
SHA-256: dd895a1e459fccdbd0e05b92431e66908594aaf1004134b9fad259acc4f3058a
emf_03.emf ooxml-emf OOXML EMF part: xl/media/image11.emf 1380 bytes
SHA-256: 871afc908698c417616c31502124ff2d32364a1f0e757b0f73e5a75c4251d4cb
emf_04.emf ooxml-emf OOXML EMF part: xl/media/image7.emf 1580 bytes
SHA-256: b91594b9d4dda5490569c923cbe78b25b03a9c316e3e17d06d50d09536a26c35
emf_05.emf ooxml-emf OOXML EMF part: xl/media/image6.emf 4244 bytes
SHA-256: 043acbe2dc62dab3000701321d3f0a8a4e6e99d81ae462267033b9f6390403f6
emf_06.emf ooxml-emf OOXML EMF part: xl/media/image5.emf 4292 bytes
SHA-256: 6dfd6cf26cdb8e3e84885e0170fc4f1c106013eccdf92d9ee04962e9ad65dcfe
emf_07.emf ooxml-emf OOXML EMF part: xl/media/image4.emf 2432 bytes
SHA-256: 42ac1284ae847afc40c6edb5b4bfb732b3f1d77691d70ec49910df038ed2c7d6
emf_08.emf ooxml-emf OOXML EMF part: xl/media/image3.emf 2992 bytes
SHA-256: 66ef22256c906a85001a1881a7105ae6e2cacc43a8b9d0ae724fa79cb02e6992
emf_09.emf ooxml-emf OOXML EMF part: xl/media/image12.emf 1368 bytes
SHA-256: 7dbe5ce781ecc9ac5bcec2b6f141b0f085f2c86d06c19ea3f39c8ddbcd57e3fd
emf_10.emf ooxml-emf OOXML EMF part: xl/media/image13.emf 2588 bytes
SHA-256: c156825dc62a3940b713e628b0c0dc18ed0ce1c54a7ef3d1c9ccb0557f62e9c5
emf_11.emf ooxml-emf OOXML EMF part: xl/media/image14.emf 2408 bytes
SHA-256: 3728d28f11086d1703c9ce2017950d741368acfbe4c77cd9db052320cf26eba1
emf_12.emf ooxml-emf OOXML EMF part: xl/media/image17.emf 2840 bytes
SHA-256: da858e696af068b80998895a962fa6f11b6ea330a6d87f6440fa639fc54cc4fd
emf_13.emf ooxml-emf OOXML EMF part: xl/media/image16.emf 1820 bytes
SHA-256: 80b264ff195e6acf45c33fa97c20c45a2365ba4b201fc104d9cf25b0af7884c5
emf_14.emf ooxml-emf OOXML EMF part: xl/media/image15.emf 2852 bytes
SHA-256: e7727d63ff8801b0d980d5d878d21c2197c144c81108d00cf674ec4dc94b0f75
emf_15.emf ooxml-emf OOXML EMF part: xl/media/image1.emf 3112 bytes
SHA-256: f08e5bee8a9fe188722d5d6c9530c90352b5991a1b0c060c84db8e624b3dfaab
emf_16.emf ooxml-emf OOXML EMF part: xl/media/image2.emf 3148 bytes
SHA-256: c641e47f60a3f1e2f5f4cb6953430a6c7e762c470dc15cbb8cf5e1c002f16b45