Initial commit
This commit is contained in:
commit
879fd2ef51
37
VBAMake.txt
Normal file
37
VBAMake.txt
Normal file
|
@ -0,0 +1,37 @@
|
||||||
|
# == Properties Section ==
|
||||||
|
# configuration properties
|
||||||
|
# use .ini format to define properties
|
||||||
|
# mandatory properties: name, artifact_home, source_home
|
||||||
|
|
||||||
|
id = ExcelHelper
|
||||||
|
name = ExcelHelper
|
||||||
|
description = Надстройка КОНЦЕПТ для Excel
|
||||||
|
artifact_home = Addins
|
||||||
|
source_home = ExcelAI
|
||||||
|
install_home = \\fs1.concept.ru\projects\04 Направления деятельности\60 КИВТ\21 Надстройки\EXCEL
|
||||||
|
|
||||||
|
%%
|
||||||
|
# === Build section ===
|
||||||
|
# Available commands:
|
||||||
|
# build LOCAL_MANIFEST
|
||||||
|
# copy LOCAL_SOURCE -> [LOCAL_ARTIFACT]
|
||||||
|
# save_as LOCAL_ARTIFACT -> LOCAL_ARTIFACT
|
||||||
|
# run LOCAL_SOURCE.bat
|
||||||
|
|
||||||
|
build script\manifest.txt
|
||||||
|
save_as CONCEPT.xlsm -> CONCEPT.xlam
|
||||||
|
copy distr\Excel.docx
|
||||||
|
|
||||||
|
%%
|
||||||
|
# === Install section ==
|
||||||
|
# Available commands:
|
||||||
|
# install LOCAL_ARTIFACT -> [INSTALL_PATH]
|
||||||
|
# add_template LOCAL_ARTIFACT -> [LOCAL_TEMPLATE]
|
||||||
|
# run LOCAL_ARTIFACT.bat <- [PARAMETERS]
|
||||||
|
# run APPLICATION <- [PARAMETERS]
|
||||||
|
|
||||||
|
install CONCEPT.xlam
|
||||||
|
install CONCEPT.xlam -> \\fs1.concept.ru\Exchange\ConceptDistr\data\Add-ins\Excel\CONCEPT.xlam
|
||||||
|
|
||||||
|
install Excel.docx
|
||||||
|
install Excel.docx -> \\fs1.concept.ru\projects\10 Автоматизация деятельности\02 Офисная автоматизация\!Надстройки\Excel.docx
|
BIN
distr/Excel.docx
Normal file
BIN
distr/Excel.docx
Normal file
Binary file not shown.
93
script/manifest.txt
Normal file
93
script/manifest.txt
Normal file
|
@ -0,0 +1,93 @@
|
||||||
|
# == Properties Section ==
|
||||||
|
# configuration properties
|
||||||
|
# use .ini format to define properties
|
||||||
|
# mandatory properties: name, artifact
|
||||||
|
|
||||||
|
name = CONCEPT.xlsm
|
||||||
|
artifact = CONCEPT.xlsm
|
||||||
|
|
||||||
|
%%
|
||||||
|
# === Imports Section ===
|
||||||
|
# Hierarchy of folders and files
|
||||||
|
# Use Tabulator to mark next level in hierarchy
|
||||||
|
# All folders are nested into SharedHome path
|
||||||
|
|
||||||
|
dev
|
||||||
|
DevTester.bas
|
||||||
|
ex_ConceptOrganization.bas
|
||||||
|
|
||||||
|
api
|
||||||
|
ex_Python.bas
|
||||||
|
ex_WinAPI.bas
|
||||||
|
ex_ConceptCore.bas
|
||||||
|
|
||||||
|
API_Python.cls
|
||||||
|
API_Path.cls
|
||||||
|
API_WordWrapper.cls
|
||||||
|
API_XLWrapper.cls
|
||||||
|
API_UserInteraction.cls
|
||||||
|
|
||||||
|
excel
|
||||||
|
ex_Excel.bas
|
||||||
|
|
||||||
|
utility
|
||||||
|
ex_VBA.bas
|
||||||
|
ex_DataPreparation.bas
|
||||||
|
ex_Version.bas
|
||||||
|
|
||||||
|
API_DistrManifest.cls
|
||||||
|
API_Config.cls
|
||||||
|
API_JSON.cls
|
||||||
|
API_Timer.cls
|
||||||
|
|
||||||
|
ui
|
||||||
|
CSE_ProgressBar.frm
|
||||||
|
|
||||||
|
%%
|
||||||
|
# === Source Code Section ==
|
||||||
|
# Hierarchy of folders and files
|
||||||
|
# Use Tabulator to mark next level in hierarchy
|
||||||
|
# All folders are nested into SourceHome path
|
||||||
|
|
||||||
|
src
|
||||||
|
DevHelper.bas
|
||||||
|
Declarations.bas
|
||||||
|
Main.bas
|
||||||
|
MainImpl.bas
|
||||||
|
PublicFunctions.bas
|
||||||
|
z_UIMessages.bas
|
||||||
|
z_UIRibbon.bas
|
||||||
|
|
||||||
|
AddinOptions.cls
|
||||||
|
CellProcessor.cls
|
||||||
|
LinksOutput.cls
|
||||||
|
LinksRelocator.cls
|
||||||
|
SearchEngine.cls
|
||||||
|
ParametersSearch.cls
|
||||||
|
|
||||||
|
WordDlg.frm
|
||||||
|
RelocateDlg.frm
|
||||||
|
SearchDlg.frm
|
||||||
|
|
||||||
|
%%
|
||||||
|
# ===== UI Section =======
|
||||||
|
# Pairs of path to UI elements, use " -> " delimiter
|
||||||
|
# First component is a path relative to SourceHome\ui folders
|
||||||
|
# Second component is internal path inside project file
|
||||||
|
|
||||||
|
.rels -> _rels\.rels
|
||||||
|
customUI.xml -> customUI\customUI.xml
|
||||||
|
|
||||||
|
%%
|
||||||
|
# === References Section ===
|
||||||
|
# List dependencies in one of the formats
|
||||||
|
# global : GLOBAL_NAME
|
||||||
|
# guid : {REGISTERED_GUID}
|
||||||
|
# file : PATH_TO_LIBRARY
|
||||||
|
|
||||||
|
global : Scripting
|
||||||
|
global : MSForms
|
||||||
|
global : Word
|
||||||
|
global : Shell32
|
||||||
|
global : ADODB
|
||||||
|
global : IWshRuntimeLibrary
|
BIN
skeleton/CONCEPT.xlsm
Normal file
BIN
skeleton/CONCEPT.xlsm
Normal file
Binary file not shown.
31
src/AddinOptions.cls
Normal file
31
src/AddinOptions.cls
Normal file
|
@ -0,0 +1,31 @@
|
||||||
|
VERSION 1.0 CLASS
|
||||||
|
BEGIN
|
||||||
|
MultiUse = -1 'True
|
||||||
|
END
|
||||||
|
Attribute VB_Name = "AddinOptions"
|
||||||
|
Attribute VB_GlobalNameSpace = False
|
||||||
|
Attribute VB_Creatable = False
|
||||||
|
Attribute VB_PredeclaredId = False
|
||||||
|
Attribute VB_Exposed = False
|
||||||
|
Option Explicit
|
||||||
|
|
||||||
|
Public data_ As Scripting.Dictionary
|
||||||
|
|
||||||
|
Private Sub Class_Initialize()
|
||||||
|
Set data_ = New Scripting.Dictionary
|
||||||
|
Dim nItem&
|
||||||
|
For nItem = TWordAddin.[_First] To TWordAddin.[_Last] Step 1
|
||||||
|
data_.Item(nItem) = False
|
||||||
|
Next nItem
|
||||||
|
End Sub
|
||||||
|
|
||||||
|
Public Function CheckProductEnabled(sProduct$) As Boolean
|
||||||
|
Dim nItem&
|
||||||
|
For nItem = TWordAddin.[_First] To TWordAddin.[_Last] Step 1
|
||||||
|
If sProduct = ProductNameFromID(nItem) Then
|
||||||
|
CheckProductEnabled = data_.Item(nItem)
|
||||||
|
Exit Function
|
||||||
|
End If
|
||||||
|
Next nItem
|
||||||
|
CheckProductEnabled = True
|
||||||
|
End Function
|
84
src/CellProcessor.cls
Normal file
84
src/CellProcessor.cls
Normal file
|
@ -0,0 +1,84 @@
|
||||||
|
VERSION 1.0 CLASS
|
||||||
|
BEGIN
|
||||||
|
MultiUse = -1 'True
|
||||||
|
END
|
||||||
|
Attribute VB_Name = "CellProcessor"
|
||||||
|
Attribute VB_GlobalNameSpace = False
|
||||||
|
Attribute VB_Creatable = False
|
||||||
|
Attribute VB_PredeclaredId = False
|
||||||
|
Attribute VB_Exposed = False
|
||||||
|
Option Explicit
|
||||||
|
|
||||||
|
Public countAll_ As Long
|
||||||
|
Public countInvalid_ As Long
|
||||||
|
|
||||||
|
Private fso_ As Scripting.FileSystemObject
|
||||||
|
|
||||||
|
Public Function Init()
|
||||||
|
countAll_ = 0
|
||||||
|
countInvalid_ = 0
|
||||||
|
Set fso_ = New Scripting.FileSystemObject
|
||||||
|
End Function
|
||||||
|
|
||||||
|
Public Function TrimCell(target As Excel.Range)
|
||||||
|
target = TrimWhitespace(target.Text)
|
||||||
|
End Function
|
||||||
|
|
||||||
|
Public Function TrimCellPunctuation(target As Excel.Range)
|
||||||
|
target = TrimEndPunctuation(target.Text)
|
||||||
|
End Function
|
||||||
|
|
||||||
|
Public Function SubstituteWS(target As Excel.Range)
|
||||||
|
target = SubstituteWhitespace(target.Text)
|
||||||
|
End Function
|
||||||
|
|
||||||
|
Public Function CreateHyperlink(target As Excel.Range)
|
||||||
|
Call XLUpdateHyperlink(target, target.Text)
|
||||||
|
End Function
|
||||||
|
|
||||||
|
Public Function SplitTextIntoColumn(target As Excel.Range)
|
||||||
|
Dim vWords As Variant: vWords = VBA.Split(target.Text, " ")
|
||||||
|
If VBA.VarType(vWords) < vbArray Or VBA.VarType(vWords) > vbArray + vbByte Then _
|
||||||
|
Call Err.Raise(1000, Description:=vWords)
|
||||||
|
|
||||||
|
Dim output As Excel.Range: Set output = target
|
||||||
|
Dim sWord As Variant
|
||||||
|
For Each sWord In vWords
|
||||||
|
Set output = output.Offset(1, 0)
|
||||||
|
output = CStr(sWord)
|
||||||
|
Next sWord
|
||||||
|
End Function
|
||||||
|
|
||||||
|
Public Function ValidateHyperlink(target As Excel.Range)
|
||||||
|
If target.Hyperlinks.Count = 0 Then _
|
||||||
|
Exit Function
|
||||||
|
|
||||||
|
countAll_ = countAll_ + 1
|
||||||
|
If IsValidHyperlink(target) Then
|
||||||
|
target.Interior.ColorIndex = xlNone
|
||||||
|
Else
|
||||||
|
target.Interior.Color = VBA.RGB(253, 233, 217)
|
||||||
|
countInvalid_ = countInvalid_ + 1
|
||||||
|
End If
|
||||||
|
End Function
|
||||||
|
|
||||||
|
Public Function FixServerLink(target As Excel.Range)
|
||||||
|
countAll_ = countAll_ + 1
|
||||||
|
|
||||||
|
Dim iPath As New API_Path: Call iPath.FromString(target.Text).GlobalToServer
|
||||||
|
If iPath.Text = target.Text Then _
|
||||||
|
Exit Function
|
||||||
|
|
||||||
|
target = iPath.Text
|
||||||
|
Call XLUpdateHyperlink(target, iPath.Text)
|
||||||
|
countInvalid_ = countInvalid_ + 1
|
||||||
|
End Function
|
||||||
|
|
||||||
|
' ======
|
||||||
|
Private Function IsValidHyperlink(target As Excel.Range) As Boolean
|
||||||
|
Dim sFile$: sFile = target.Hyperlinks(1).Address
|
||||||
|
Dim iPath As New API_Path: Call iPath.FromString(sFile).ToGlobal(target.Parent.Parent.Path)
|
||||||
|
IsValidHyperlink = iPath.GlobalExists
|
||||||
|
End Function
|
||||||
|
|
||||||
|
|
47
src/Declarations.bas
Normal file
47
src/Declarations.bas
Normal file
|
@ -0,0 +1,47 @@
|
||||||
|
Attribute VB_Name = "Declarations"
|
||||||
|
Option Private Module
|
||||||
|
Option Explicit
|
||||||
|
|
||||||
|
Public Const APP_HELP = "\\fs1.concept.ru\projects\10 Àâòîìàòèçàöèÿ äåÿòåëüíîñòè\02 Îôèñíàÿ àâòîìàòèçàöèÿ\!Íàäñòðîéêè\Excel.docx"
|
||||||
|
|
||||||
|
Public Const CONCEPT_LOCAL_HOME = ".concept"
|
||||||
|
Public Const CONCEPT_SERVER_HOME = "\\fs1.concept.ru\projects\10 Àâòîìàòèçàöèÿ äåÿòåëüíîñòè\!Concept"
|
||||||
|
|
||||||
|
Public Const CONCEPT_BANNED_WORDS = "banned-words.txt"
|
||||||
|
|
||||||
|
Public Const SERVER_TEMPLATES_FOLDER = "\\fs1.concept.ru\Data\Templates"
|
||||||
|
Public Const LOCAL_TEMPLATES_FOLDER = "Microsoft\Øàáëîíû"
|
||||||
|
|
||||||
|
Public Const PROJECTS_FIRST_ROW = 2
|
||||||
|
Public Const VISIO_DEFAULT_GAP = 0.254
|
||||||
|
|
||||||
|
' Matching mode
|
||||||
|
Public Enum TMatchMode
|
||||||
|
T_MM_DEFAULT = 1
|
||||||
|
T_MM_SPACE_LEFT = 2
|
||||||
|
T_MM_SPACE_RIGHT = 3
|
||||||
|
T_MM_SPACE_BOTH = 4
|
||||||
|
End Enum
|
||||||
|
|
||||||
|
' Word Addins
|
||||||
|
Public Enum TWordAddin
|
||||||
|
[_First] = 1
|
||||||
|
|
||||||
|
T_WA_CONCEPT = 1
|
||||||
|
T_WA_NPA = 2
|
||||||
|
T_WA_MARKUP = 3
|
||||||
|
T_WA_PARSERS = 4
|
||||||
|
T_WA_MAKET = 5
|
||||||
|
|
||||||
|
[_Last] = 5
|
||||||
|
End Enum
|
||||||
|
|
||||||
|
Public Function ProductNameFromID(nID As TWordAddin) As String
|
||||||
|
Select Case nID
|
||||||
|
Case T_WA_CONCEPT: ProductNameFromID = "WordHelper"
|
||||||
|
Case T_WA_NPA: ProductNameFromID = "Concept-NPA"
|
||||||
|
Case T_WA_MARKUP: ProductNameFromID = "Concept-Markup"
|
||||||
|
Case T_WA_PARSERS: ProductNameFromID = "Concept-Mining"
|
||||||
|
Case T_WA_MAKET: ProductNameFromID = "Concept-Maket"
|
||||||
|
End Select
|
||||||
|
End Function
|
20
src/DevHelper.bas
Normal file
20
src/DevHelper.bas
Normal file
|
@ -0,0 +1,20 @@
|
||||||
|
Attribute VB_Name = "DevHelper"
|
||||||
|
Option Explicit
|
||||||
|
|
||||||
|
Public Function Dev_PrepareSkeleton()
|
||||||
|
' Do nothing
|
||||||
|
End Function
|
||||||
|
|
||||||
|
Public Sub Dev_ManualRunTest()
|
||||||
|
Dim sSuite$: sSuite = "s_UndoWrapper"
|
||||||
|
Dim sTest$: sTest = "t_BasicUndo"
|
||||||
|
Dim sMsg$: sMsg = Dev_RunTestDebug(sSuite, sTest)
|
||||||
|
Debug.Print sMsg
|
||||||
|
Call MsgBox(sMsg)
|
||||||
|
End Sub
|
||||||
|
|
||||||
|
Public Function Dev_GetTestSuite(sName$) As Object
|
||||||
|
Select Case sName
|
||||||
|
' Case "s_ParseDate": Set Dev_GetTestSuite = New s_ParseDate
|
||||||
|
End Select
|
||||||
|
End Function
|
36
src/LinksOutput.cls
Normal file
36
src/LinksOutput.cls
Normal file
|
@ -0,0 +1,36 @@
|
||||||
|
VERSION 1.0 CLASS
|
||||||
|
BEGIN
|
||||||
|
MultiUse = -1 'True
|
||||||
|
END
|
||||||
|
Attribute VB_Name = "LinksOutput"
|
||||||
|
Attribute VB_GlobalNameSpace = False
|
||||||
|
Attribute VB_Creatable = False
|
||||||
|
Attribute VB_PredeclaredId = False
|
||||||
|
Attribute VB_Exposed = False
|
||||||
|
Option Explicit
|
||||||
|
|
||||||
|
Private out_ As Excel.Range
|
||||||
|
Private mask_ As String
|
||||||
|
|
||||||
|
Public countAdded_ As Long
|
||||||
|
Public countAll_ As Long
|
||||||
|
|
||||||
|
Public Function Init(iOut As Excel.Range, sMask$)
|
||||||
|
Set out_ = iOut
|
||||||
|
countAdded_ = 0
|
||||||
|
countAll_ = 0
|
||||||
|
mask_ = sMask
|
||||||
|
End Function
|
||||||
|
|
||||||
|
Public Function ProcessFile(iFile As Scripting.File)
|
||||||
|
countAll_ = countAll_ + 1
|
||||||
|
If Not iFile.Path Like mask_ Then _
|
||||||
|
Exit Function
|
||||||
|
|
||||||
|
Dim iCell As Excel.Range: Set iCell = out_.Offset(countAdded_, 0)
|
||||||
|
iCell = iFile.Path
|
||||||
|
|
||||||
|
On Error Resume Next
|
||||||
|
Call iCell.Hyperlinks.Add(iCell, iFile.Path)
|
||||||
|
countAdded_ = countAdded_ + 1
|
||||||
|
End Function
|
76
src/LinksRelocator.cls
Normal file
76
src/LinksRelocator.cls
Normal file
|
@ -0,0 +1,76 @@
|
||||||
|
VERSION 1.0 CLASS
|
||||||
|
BEGIN
|
||||||
|
MultiUse = -1 'True
|
||||||
|
END
|
||||||
|
Attribute VB_Name = "LinksRelocator"
|
||||||
|
Attribute VB_GlobalNameSpace = False
|
||||||
|
Attribute VB_Creatable = False
|
||||||
|
Attribute VB_PredeclaredId = False
|
||||||
|
Attribute VB_Exposed = False
|
||||||
|
Option Explicit
|
||||||
|
|
||||||
|
Private fso_ As Scripting.FileSystemObject
|
||||||
|
Private prefix_ As String
|
||||||
|
Private destination_ As String
|
||||||
|
Private home_ As String
|
||||||
|
Private removeSource_ As Boolean
|
||||||
|
|
||||||
|
Public countAll_ As Long
|
||||||
|
Public countRelocated_ As Long
|
||||||
|
|
||||||
|
Public Function Init(sDestination$, sPrefix$, sHome$, bRemoveSource As Boolean)
|
||||||
|
Set fso_ = New Scripting.FileSystemObject
|
||||||
|
prefix_ = sPrefix
|
||||||
|
destination_ = sDestination
|
||||||
|
home_ = sHome
|
||||||
|
removeSource_ = bRemoveSource
|
||||||
|
|
||||||
|
countAll_ = 0
|
||||||
|
countRelocated_ = 0
|
||||||
|
End Function
|
||||||
|
|
||||||
|
Public Function ProcessCell(target As Excel.Range)
|
||||||
|
If target.Hyperlinks.Count = 0 Then _
|
||||||
|
Exit Function
|
||||||
|
|
||||||
|
countAll_ = countAll_ + 1
|
||||||
|
Dim iPath As New API_Path: Call iPath.FromString(target.Value).ToGlobal(home_)
|
||||||
|
Dim iRelativePath As API_Path: Set iRelativePath = iPath.Clone.ToLocal(prefix_)
|
||||||
|
If iRelativePath.Text = iPath.Text Then _
|
||||||
|
Set iRelativePath = GenerateLocalPath(iPath.FileName)
|
||||||
|
|
||||||
|
If Not iPath.GlobalExists Then _
|
||||||
|
GoTo MARK_FAILURE
|
||||||
|
|
||||||
|
Dim iDestination As API_Path: Set iDestination = iRelativePath.Clone
|
||||||
|
Call iDestination.ToGlobal(destination_)
|
||||||
|
|
||||||
|
If removeSource_ Then
|
||||||
|
If Not MoveFileOrFolder(iPath.Text, iDestination.Text, fso_) Then _
|
||||||
|
GoTo MARK_FAILURE
|
||||||
|
Else
|
||||||
|
If Not CopyFileOrFolder(iPath.Text, iDestination.Text, fso_) Then _
|
||||||
|
GoTo MARK_FAILURE
|
||||||
|
End If
|
||||||
|
|
||||||
|
target = iDestination.Text
|
||||||
|
Call XLUpdateHyperlink(target, iDestination.Text)
|
||||||
|
target.Interior.ColorIndex = xlNone
|
||||||
|
countRelocated_ = countRelocated_ + 1
|
||||||
|
Exit Function
|
||||||
|
|
||||||
|
MARK_FAILURE:
|
||||||
|
target.Interior.Color = VBA.RGB(253, 233, 217)
|
||||||
|
End Function
|
||||||
|
|
||||||
|
' ======
|
||||||
|
Private Function GenerateLocalPath(sName$) As API_Path
|
||||||
|
Dim iPath As New API_Path: Call iPath.FromString(sName)
|
||||||
|
Call iPath.ToGlobal(destination_)
|
||||||
|
Dim nCopy&: nCopy = 1
|
||||||
|
Do While iPath.GlobalExists
|
||||||
|
Call iPath.FromString(Fmt("{1}_{2}.{3}", iPath.BaseName, nCopy, iPath.Extension))
|
||||||
|
Call iPath.ToGlobal(destination_)
|
||||||
|
Loop
|
||||||
|
Set GenerateLocalPath = iPath
|
||||||
|
End Function
|
295
src/Main.bas
Normal file
295
src/Main.bas
Normal file
|
@ -0,0 +1,295 @@
|
||||||
|
Attribute VB_Name = "Main"
|
||||||
|
Option Explicit
|
||||||
|
Option Private Module
|
||||||
|
|
||||||
|
Public Sub CC_RunGroupByRank()
|
||||||
|
Dim iSelection As Excel.Range: Set iSelection = ActiveWorkbook.Application.Selection
|
||||||
|
Dim nRow&: nRow = 1
|
||||||
|
Dim sTxt$
|
||||||
|
Do
|
||||||
|
sTxt = iSelection.Cells(nRow, 1)
|
||||||
|
If sTxt = vbNullString Then _
|
||||||
|
Exit Do
|
||||||
|
If IsNumeric(sTxt) Then _
|
||||||
|
iSelection.Rows(nRow).OutlineLevel = CLng(sTxt)
|
||||||
|
nRow = nRow + 1
|
||||||
|
Loop
|
||||||
|
End Sub
|
||||||
|
|
||||||
|
Public Sub CC_RunGroupByID()
|
||||||
|
Dim iSelection As Excel.Range: Set iSelection = ActiveWorkbook.Application.Selection
|
||||||
|
Dim nRow&: nRow = 1
|
||||||
|
Dim lastID$: lastID = vbNullString
|
||||||
|
Dim curID$
|
||||||
|
Do
|
||||||
|
curID = iSelection.Cells(nRow, 1)
|
||||||
|
If curID = vbNullString Then _
|
||||||
|
Exit Do
|
||||||
|
iSelection.Rows(nRow).OutlineLevel = IIf(lastID = curID, 2, 1)
|
||||||
|
lastID = curID
|
||||||
|
nRow = nRow + 1
|
||||||
|
Loop
|
||||||
|
End Sub
|
||||||
|
|
||||||
|
Public Sub CC_RunClearFormatting()
|
||||||
|
Dim iSelection As Excel.Range: Set iSelection = ActiveWorkbook.Application.Selection
|
||||||
|
Do While iSelection.FormatConditions.Count > 0
|
||||||
|
Call iSelection.FormatConditions.Item(1).Delete
|
||||||
|
Loop
|
||||||
|
End Sub
|
||||||
|
|
||||||
|
Public Sub CC_RunTrimCells()
|
||||||
|
Call XLForEachNonEmptyCell( _
|
||||||
|
target:=ActiveWorkbook.Application.Selection, _
|
||||||
|
oCallback:=New CellProcessor, _
|
||||||
|
sFuncName:="TrimCell")
|
||||||
|
End Sub
|
||||||
|
|
||||||
|
Public Sub CC_RunTrimPunctuation()
|
||||||
|
Call XLForEachNonEmptyCell( _
|
||||||
|
target:=ActiveWorkbook.Application.Selection, _
|
||||||
|
oCallback:=New CellProcessor, _
|
||||||
|
sFuncName:="TrimCellPunctuation")
|
||||||
|
End Sub
|
||||||
|
|
||||||
|
Public Sub CC_RunSubstituteWhitespace()
|
||||||
|
Call XLForEachNonEmptyCell( _
|
||||||
|
target:=ActiveWorkbook.Application.Selection, _
|
||||||
|
oCallback:=New CellProcessor, _
|
||||||
|
sFuncName:="SubstituteWS")
|
||||||
|
End Sub
|
||||||
|
|
||||||
|
Public Sub CC_RunLinksCreate()
|
||||||
|
Call XLForEachNonEmptyCell( _
|
||||||
|
target:=ActiveWorkbook.Application.Selection, _
|
||||||
|
oCallback:=New CellProcessor, _
|
||||||
|
sFuncName:="CreateHyperlink")
|
||||||
|
End Sub
|
||||||
|
|
||||||
|
Public Sub CC_RunSplitText()
|
||||||
|
Call XLForEachNonEmptyCell( _
|
||||||
|
target:=ActiveWorkbook.Application.Selection, _
|
||||||
|
oCallback:=New CellProcessor, _
|
||||||
|
sFuncName:="SplitTextIntoColumn")
|
||||||
|
End Sub
|
||||||
|
|
||||||
|
Public Sub CC_RunLinksScan()
|
||||||
|
Dim sMask$: sMask = UserInteraction.PromptInput("Ââåäèòå ìàñêó îòáèðàåìûõ ôàéëîâ", sInitial:="*.*")
|
||||||
|
If sMask = vbNullString Then _
|
||||||
|
Exit Sub
|
||||||
|
Dim sFolder$: sFolder = UserInteraction.PromptFolder(ActiveWorkbook.Path & "\")
|
||||||
|
If sFolder = vbNullString Then _
|
||||||
|
Exit Sub
|
||||||
|
|
||||||
|
Dim iScanner As New LinksOutput: Call iScanner.Init(ActiveWorkbook.Application.Selection.Cells(1, 1), sMask)
|
||||||
|
Call ForEachFileRecursive(sFolder, iScanner, "ProcessFile")
|
||||||
|
|
||||||
|
Call UserInteraction.ShowMessage(IM_LINKS_SCAN_OK, iScanner.countAdded_, iScanner.countAll_)
|
||||||
|
End Sub
|
||||||
|
|
||||||
|
Public Sub CC_RunLinksValidate()
|
||||||
|
Dim iProcessor As New CellProcessor: Call iProcessor.Init
|
||||||
|
Call XLForEachNonEmptyCell( _
|
||||||
|
target:=ActiveWorkbook.Application.Selection, _
|
||||||
|
oCallback:=iProcessor, _
|
||||||
|
sFuncName:="ValidateHyperlink")
|
||||||
|
Call UserInteraction.ShowMessage(IM_LINKS_VALIDATION, iProcessor.countInvalid_, iProcessor.countAll_)
|
||||||
|
End Sub
|
||||||
|
|
||||||
|
Public Sub CC_RunLinksServer()
|
||||||
|
Dim iProcessor As New CellProcessor: Call iProcessor.Init
|
||||||
|
Call XLForEachNonEmptyCell( _
|
||||||
|
target:=ActiveWorkbook.Application.Selection, _
|
||||||
|
oCallback:=iProcessor, _
|
||||||
|
sFuncName:="FixServerLink")
|
||||||
|
Call UserInteraction.ShowMessage(IM_LINKS_SERVER, iProcessor.countInvalid_, iProcessor.countAll_)
|
||||||
|
End Sub
|
||||||
|
|
||||||
|
Public Sub CC_RunLinksRelocate()
|
||||||
|
Dim iTarget As Excel.Workbook: Set iTarget = ActiveWorkbook
|
||||||
|
Dim iSelection As Excel.Range: Set iSelection = iTarget.Application.Selection
|
||||||
|
If iSelection.Hyperlinks.Count = 0 Then
|
||||||
|
Call UserInteraction.ShowMessage(EM_SELECTION_NO_HYPERLINKS)
|
||||||
|
Exit Sub
|
||||||
|
End If
|
||||||
|
|
||||||
|
Dim fso As New Scripting.FileSystemObject
|
||||||
|
Dim sInitFolder$: sInitFolder = fso.GetParentFolderName(iSelection.Hyperlinks(1).Address)
|
||||||
|
Call RelocateDlg.Init(sInitFolder)
|
||||||
|
Call RelocateDlg.Show
|
||||||
|
If RelocateDlg.isCancelled_ Then _
|
||||||
|
Exit Sub
|
||||||
|
|
||||||
|
Dim iProcessor As New LinksRelocator: Call iProcessor.Init(RelocateDlg.Path, RelocateDlg.Prefix, iTarget.Path, bRemoveSource:=True)
|
||||||
|
Call XLForEachNonEmptyCell( _
|
||||||
|
target:=ActiveWorkbook.Application.Selection, _
|
||||||
|
oCallback:=iProcessor, _
|
||||||
|
sFuncName:="ProcessCell")
|
||||||
|
|
||||||
|
Call UserInteraction.ShowMessage(IM_LINKS_RELOCATE_OK, iProcessor.countRelocated_, iProcessor.countAll_)
|
||||||
|
End Sub
|
||||||
|
|
||||||
|
Public Sub CC_RunLinksCopyFiles()
|
||||||
|
Dim iTarget As Excel.Workbook: Set iTarget = ActiveWorkbook
|
||||||
|
Dim iSelection As Excel.Range: Set iSelection = iTarget.Application.Selection
|
||||||
|
If iSelection.Hyperlinks.Count = 0 Then
|
||||||
|
Call UserInteraction.ShowMessage(EM_SELECTION_NO_HYPERLINKS)
|
||||||
|
Exit Sub
|
||||||
|
End If
|
||||||
|
|
||||||
|
Dim fso As New Scripting.FileSystemObject
|
||||||
|
Dim sInitFolder$: sInitFolder = fso.GetParentFolderName(iSelection.Hyperlinks(1).Address)
|
||||||
|
Call RelocateDlg.Init(sInitFolder)
|
||||||
|
Call RelocateDlg.Show
|
||||||
|
If RelocateDlg.isCancelled_ Then _
|
||||||
|
Exit Sub
|
||||||
|
|
||||||
|
Dim iProcessor As New LinksRelocator: Call iProcessor.Init(RelocateDlg.Path, RelocateDlg.Prefix, iTarget.Path, bRemoveSource:=False)
|
||||||
|
Call XLForEachNonEmptyCell( _
|
||||||
|
target:=ActiveWorkbook.Application.Selection, _
|
||||||
|
oCallback:=iProcessor, _
|
||||||
|
sFuncName:="ProcessCell")
|
||||||
|
|
||||||
|
Call UserInteraction.ShowMessage(IM_LINKS_COPY_OK, iProcessor.countRelocated_, iProcessor.countAll_)
|
||||||
|
End Sub
|
||||||
|
|
||||||
|
Public Sub CC_RunListIncome()
|
||||||
|
Dim iProjects As Scripting.Dictionary: Set iProjects = CCListProjects(T_PRJ_INCOME)
|
||||||
|
If iProjects Is Nothing Then _
|
||||||
|
Exit Sub
|
||||||
|
Call PasteProjects(Excel.ActiveWindow.ActiveCell, iProjects)
|
||||||
|
End Sub
|
||||||
|
|
||||||
|
Public Sub CC_RunListOutcome()
|
||||||
|
Dim iProjects As Scripting.Dictionary: Set iProjects = CCListProjects(T_PRJ_OUTCOME)
|
||||||
|
If iProjects Is Nothing Then _
|
||||||
|
Exit Sub
|
||||||
|
Call PasteProjects(Excel.ActiveWindow.ActiveCell, iProjects)
|
||||||
|
End Sub
|
||||||
|
|
||||||
|
Public Sub CC_RunListLeads()
|
||||||
|
Dim iProjects As Scripting.Dictionary: Set iProjects = CCListProjects(T_PRJ_LEAD_ACTIVE)
|
||||||
|
If iProjects Is Nothing Then _
|
||||||
|
Exit Sub
|
||||||
|
Call PasteProjects(Excel.ActiveWindow.ActiveCell, iProjects)
|
||||||
|
End Sub
|
||||||
|
|
||||||
|
Public Sub CC_RunListTentative()
|
||||||
|
Dim iProjects As Scripting.Dictionary: Set iProjects = CCListProjects(T_PRJ_LEAD_TENTATIVE)
|
||||||
|
If iProjects Is Nothing Then _
|
||||||
|
Exit Sub
|
||||||
|
Call PasteProjects(Excel.ActiveWindow.ActiveCell, iProjects)
|
||||||
|
End Sub
|
||||||
|
|
||||||
|
Public Sub CC_RunLinksPrint()
|
||||||
|
Dim selRange As Excel.Range: Set selRange = ActiveWorkbook.Application.Selection
|
||||||
|
Dim theLinks As Excel.Hyperlinks: Set theLinks = selRange.Hyperlinks
|
||||||
|
If theLinks.Count = 0 Then
|
||||||
|
Call UserInteraction.ShowMessage(EM_SELECTION_NO_HYPERLINKS)
|
||||||
|
Exit Sub
|
||||||
|
End If
|
||||||
|
|
||||||
|
Call PrintLinks(theLinks)
|
||||||
|
End Sub
|
||||||
|
|
||||||
|
Public Sub CC_RunConfig()
|
||||||
|
Dim fso As New Scripting.FileSystemObject
|
||||||
|
Dim sConfigPath$: sConfigPath = ConceptConfigPath
|
||||||
|
If Not fso.FileExists(sConfigPath) Then _
|
||||||
|
Call SetupConfig(sConfigPath)
|
||||||
|
|
||||||
|
Dim oShell As New Shell32.Shell
|
||||||
|
Call oShell.Open(sConfigPath)
|
||||||
|
End Sub
|
||||||
|
|
||||||
|
Public Sub CC_RunWordAddin()
|
||||||
|
If Not ValidateNoWordOpen Then
|
||||||
|
Call UserInteraction.ShowMessage(EM_WORD_IS_OPEN)
|
||||||
|
Exit Sub
|
||||||
|
End If
|
||||||
|
|
||||||
|
Dim iCurrent As AddinOptions: Set iCurrent = ScanAddinOptions()
|
||||||
|
Call WordDlg.Init(iCurrent)
|
||||||
|
Call WordDlg.Show
|
||||||
|
If WordDlg.isCanceled_ Then _
|
||||||
|
Exit Sub
|
||||||
|
|
||||||
|
If ApplyAddins(iCurrent, WordDlg.GetResult) Then
|
||||||
|
Call UserInteraction.ShowMessage(IM_WORD_ADDINS_OK)
|
||||||
|
Else
|
||||||
|
Call UserInteraction.ShowMessage(EM_WORD_ADDINS_FAILED)
|
||||||
|
End If
|
||||||
|
End Sub
|
||||||
|
|
||||||
|
Public Sub CC_RunUpdateTemplates()
|
||||||
|
If Not ValidateNoWordOpen Then
|
||||||
|
Call UserInteraction.ShowMessage(EM_WORD_IS_OPEN)
|
||||||
|
Exit Sub
|
||||||
|
End If
|
||||||
|
|
||||||
|
If CopyFileOrFolder( _
|
||||||
|
sSource:=SERVER_TEMPLATES_FOLDER, _
|
||||||
|
sDestination:=VBA.Environ$("APPDATA") & "\" & LOCAL_TEMPLATES_FOLDER) Then
|
||||||
|
Call UserInteraction.ShowMessage(IM_TEMPLATES_OK)
|
||||||
|
Else
|
||||||
|
Call UserInteraction.ShowMessage(EM_TEMPLATES_FAILED)
|
||||||
|
End If
|
||||||
|
End Sub
|
||||||
|
|
||||||
|
Public Sub CC_RunUpdateConceptCore()
|
||||||
|
Call AccessPython.UnloadDLL
|
||||||
|
Call UnloadConceptCore
|
||||||
|
|
||||||
|
If Not UpdateConceptPowershell Then
|
||||||
|
Call UserInteraction.ShowMessage(EM_CORE_UPDATE_FAILED)
|
||||||
|
Exit Sub
|
||||||
|
End If
|
||||||
|
|
||||||
|
Call UnregisterUDF
|
||||||
|
Call RegisterUDF
|
||||||
|
Call UserInteraction.ShowMessage(IM_CONCEPT_UPDATE_OK)
|
||||||
|
End Sub
|
||||||
|
|
||||||
|
Public Sub CC_RunConceptStatus()
|
||||||
|
Dim iExcel As New API_XLWrapper
|
||||||
|
Call iExcel.NewDocument
|
||||||
|
|
||||||
|
Call OutputConceptStatus(iExcel.Document.Sheets(1))
|
||||||
|
|
||||||
|
Call iExcel.Document.Activate
|
||||||
|
End Sub
|
||||||
|
|
||||||
|
Public Sub CC_RunAppdata()
|
||||||
|
Dim oShell As New Shell32.Shell
|
||||||
|
Call oShell.Open(VBA.Environ$("APPDATA") & "\Microsoft")
|
||||||
|
End Sub
|
||||||
|
|
||||||
|
Public Sub CC_RunAnalyseSearch()
|
||||||
|
Dim iDoc As Excel.Workbook: Set iDoc = Excel.ActiveWorkbook
|
||||||
|
|
||||||
|
Call SearchDlg.Init(iDoc)
|
||||||
|
Call SearchDlg.Show
|
||||||
|
If SearchDlg.isCancelled_ Then _
|
||||||
|
Exit Sub
|
||||||
|
|
||||||
|
Dim params As ParametersSearch: Set params = SearchDlg.ResultParams
|
||||||
|
Call ExecuteSearch(iDoc, params)
|
||||||
|
|
||||||
|
Call UserInteraction.ShowMessage(IM_SEARCH_OK)
|
||||||
|
End Sub
|
||||||
|
|
||||||
|
Public Sub CC_RunHelp()
|
||||||
|
Dim iWord As New API_WordWrapper
|
||||||
|
Dim iHelp As Word.Document: Set iHelp = iWord.OpenDocument(APP_HELP, bReadOnly:=True)
|
||||||
|
If iHelp Is Nothing Then _
|
||||||
|
Exit Sub
|
||||||
|
|
||||||
|
With iHelp
|
||||||
|
.ActiveWindow.View.ReadingLayout = False
|
||||||
|
Call .Application.Activate
|
||||||
|
End With
|
||||||
|
End Sub
|
||||||
|
|
||||||
|
Public Sub CC_RunDescriptionUDF()
|
||||||
|
Call RegisterUDF
|
||||||
|
End Sub
|
168
src/MainImpl.bas
Normal file
168
src/MainImpl.bas
Normal file
|
@ -0,0 +1,168 @@
|
||||||
|
Attribute VB_Name = "MainImpl"
|
||||||
|
Option Explicit
|
||||||
|
Option Private Module
|
||||||
|
|
||||||
|
Public Function PasteProjects(ByVal rWhere As Excel.Range, iProjects As Scripting.Dictionary)
|
||||||
|
If iProjects.Count = 0 Then _
|
||||||
|
Exit Function
|
||||||
|
|
||||||
|
Set rWhere = rWhere.Cells(1, 1)
|
||||||
|
If Not IsEmpty(rWhere) Then
|
||||||
|
Call rWhere.Offset(1).EntireRow.Insert
|
||||||
|
Set rWhere = rWhere.Offset(1)
|
||||||
|
End If
|
||||||
|
|
||||||
|
Dim aKey As Variant
|
||||||
|
For Each aKey In iProjects
|
||||||
|
If IsEmpty(rWhere) Then _
|
||||||
|
GoTo PASTE_PRJ
|
||||||
|
|
||||||
|
Call rWhere.EntireRow.Insert
|
||||||
|
Set rWhere = rWhere.Offset(-1)
|
||||||
|
Call rWhere.Offset(-1).Copy(rWhere)
|
||||||
|
|
||||||
|
PASTE_PRJ:
|
||||||
|
rWhere = CStr(aKey)
|
||||||
|
Set rWhere = rWhere.Offset(1)
|
||||||
|
Next aKey
|
||||||
|
End Function
|
||||||
|
|
||||||
|
Public Function PrintLinks(iLinks As Excel.Hyperlinks)
|
||||||
|
Dim fso As New Scripting.FileSystemObject
|
||||||
|
Dim iShell As New Shell32.Shell
|
||||||
|
Dim aLink As Excel.Hyperlink
|
||||||
|
For Each aLink In iLinks
|
||||||
|
Dim sAddress$: sAddress = fso.GetAbsolutePathName(aLink.Address)
|
||||||
|
If sAddress = vbNullString Then _
|
||||||
|
GoTo NEXT_LINK
|
||||||
|
If Not fso.FileExists(sAddress) Then _
|
||||||
|
GoTo NEXT_LINK
|
||||||
|
Call iShell.ShellExecute(sAddress, vOperation:="Print")
|
||||||
|
|
||||||
|
NEXT_LINK:
|
||||||
|
Next aLink
|
||||||
|
End Function
|
||||||
|
|
||||||
|
Public Function SetupConfig(sPath$)
|
||||||
|
Dim iConfig As API_Config: Set iConfig = ConceptConfig
|
||||||
|
Call iConfig.SaveToFile(sPath)
|
||||||
|
End Function
|
||||||
|
|
||||||
|
Public Function ValidateNoWordOpen() As Boolean
|
||||||
|
On Error Resume Next
|
||||||
|
Dim iWord As Word.Application: Set iWord = GetObject(, "Word.Application")
|
||||||
|
ValidateNoWordOpen = Err.Number <> 0 Or iWord Is Nothing
|
||||||
|
On Error GoTo 0
|
||||||
|
End Function
|
||||||
|
|
||||||
|
Public Function ScanAddinOptions() As AddinOptions
|
||||||
|
Dim fso As New Scripting.FileSystemObject
|
||||||
|
Dim sLocals$: sLocals = VBA.Environ$("APPDATA") & "\Microsoft\Word\STARTUP"
|
||||||
|
Set ScanAddinOptions = New AddinOptions
|
||||||
|
With ScanAddinOptions
|
||||||
|
.data_.Item(T_WA_CONCEPT) = fso.FileExists(sLocals & "\" & ADDIN_NAME_CONCEPT)
|
||||||
|
.data_.Item(T_WA_NPA) = fso.FileExists(sLocals & "\" & ADDIN_NAME_NPA)
|
||||||
|
.data_.Item(T_WA_MARKUP) = fso.FileExists(sLocals & "\" & ADDIN_NAME_MARKUP)
|
||||||
|
.data_.Item(T_WA_PARSERS) = fso.FileExists(sLocals & "\" & ADDIN_NAME_PARSER)
|
||||||
|
.data_.Item(T_WA_MAKET) = fso.FileExists(sLocals & "\" & ADDIN_NAME_MAKET)
|
||||||
|
End With
|
||||||
|
End Function
|
||||||
|
|
||||||
|
Public Function ApplyAddins(iCurrent As AddinOptions, iNew As AddinOptions) As Boolean
|
||||||
|
ApplyAddins = False
|
||||||
|
|
||||||
|
Dim sParams$
|
||||||
|
Dim nID As TWordAddin
|
||||||
|
For nID = TWordAddin.[_First] To TWordAddin.[_Last] Step 1
|
||||||
|
If iNew.data_.Item(nID) Then
|
||||||
|
If sParams <> vbNullString Then _
|
||||||
|
sParams = sParams & ", "
|
||||||
|
sParams = sParams & ProductNameFromID(nID) & "+"
|
||||||
|
ElseIf iCurrent.data_.Item(nID) Then
|
||||||
|
If sParams <> vbNullString Then _
|
||||||
|
sParams = sParams & ", "
|
||||||
|
sParams = sParams & ProductNameFromID(nID) & "-"
|
||||||
|
End If
|
||||||
|
Next nID
|
||||||
|
|
||||||
|
ApplyAddins = VersionUpdateProducts(sParams)
|
||||||
|
End Function
|
||||||
|
|
||||||
|
Public Function ExecuteSearch(target As Excel.Workbook, params As ParametersSearch)
|
||||||
|
Dim iOut As Excel.Worksheet: Set iOut = target.Sheets.Add
|
||||||
|
Dim iEngine As New SearchEngine
|
||||||
|
Call iEngine.Init(iOut, params)
|
||||||
|
Call iEngine.Execute
|
||||||
|
End Function
|
||||||
|
|
||||||
|
Public Function UpdateConceptPowershell() As Boolean
|
||||||
|
UpdateConceptPowershell = False
|
||||||
|
|
||||||
|
Dim fso As New Scripting.FileSystemObject
|
||||||
|
Dim sInstall$: sInstall = CP_TOOLS_SERVER & "\" & CONCEPT_INSTALLER
|
||||||
|
If Not fso.FileExists(sInstall) Then _
|
||||||
|
Exit Function
|
||||||
|
|
||||||
|
On Error GoTo RETURN_FALSE
|
||||||
|
Dim sExec$: sExec = "cmd.exe /c " & """" & sInstall & """" & " < nul"
|
||||||
|
Dim iShell As New WshShell
|
||||||
|
iShell.CurrentDirectory = CP_TOOLS_SERVER
|
||||||
|
UpdateConceptPowershell = iShell.Run(sExec, waitOnReturn:=True) = 0
|
||||||
|
Exit Function
|
||||||
|
|
||||||
|
RETURN_FALSE:
|
||||||
|
On Error GoTo 0
|
||||||
|
End Function
|
||||||
|
|
||||||
|
Public Function OutputConceptStatus(iOut As Excel.Worksheet)
|
||||||
|
With iOut
|
||||||
|
.Cells(1, 1) = "ProductID"
|
||||||
|
.Cells(1, 2) = "Ëîêàëüíàÿ âåðñèÿ"
|
||||||
|
.Cells(1, 3) = "Ñåðâåðíàÿ âåðñèÿ"
|
||||||
|
.Cells(1, 4) = "Àêòèâíûé ïðîäóêò"
|
||||||
|
.Columns(1).ColumnWidth = 25
|
||||||
|
.Columns(2).ColumnWidth = 15
|
||||||
|
.Columns(3).ColumnWidth = 15
|
||||||
|
.Columns(4).ColumnWidth = 15
|
||||||
|
End With
|
||||||
|
|
||||||
|
Dim nRow&: nRow = 2
|
||||||
|
|
||||||
|
Dim iLocal As API_DistrManifest: Set iLocal = VersionLocalManifest
|
||||||
|
Dim iServer As API_DistrManifest: Set iServer = VersionServerManifest
|
||||||
|
Dim iEnabled As AddinOptions: Set iEnabled = ScanAddinOptions
|
||||||
|
|
||||||
|
Dim iProduct As Variant
|
||||||
|
For Each iProduct In iLocal.data_.Keys
|
||||||
|
Dim sProduct$: sProduct = VBA.CStr(iProduct)
|
||||||
|
|
||||||
|
Dim sLocalVer$: sLocalVer = iLocal.GetVersion(sProduct)
|
||||||
|
If sLocalVer = vbNullString Then _
|
||||||
|
sLocalVer = "íåò äàííûõ"
|
||||||
|
|
||||||
|
Dim sServerVer$: sServerVer = iServer.GetVersion(sProduct)
|
||||||
|
If sServerVer = vbNullString Then _
|
||||||
|
sServerVer = "íåò äàííûõ"
|
||||||
|
|
||||||
|
With iOut
|
||||||
|
.Cells(nRow, 1) = sProduct
|
||||||
|
.Cells(nRow, 2) = sLocalVer
|
||||||
|
.Cells(nRow, 3) = sServerVer
|
||||||
|
.Cells(nRow, 4) = IIf(iEnabled.CheckProductEnabled(sProduct), "ÄÀ", "ÍÅÒ")
|
||||||
|
End With
|
||||||
|
nRow = nRow + 1
|
||||||
|
Next iProduct
|
||||||
|
End Function
|
||||||
|
|
||||||
|
' =======
|
||||||
|
Private Function ScanProjects(iSource As Excel.Worksheet) As Collection
|
||||||
|
Set ScanProjects = New Collection
|
||||||
|
Dim nRow&
|
||||||
|
Dim lstRow&: lstRow = iSource.Cells(iSource.Rows.Count, 1).End(xlUp).Row
|
||||||
|
nRow = PROJECTS_FIRST_ROW
|
||||||
|
For nRow = PROJECTS_FIRST_ROW To lstRow Step 1
|
||||||
|
Dim sTxt$: sTxt = iSource.Cells(nRow, 1)
|
||||||
|
If sTxt <> vbNullString Then _
|
||||||
|
Call ScanProjects.Add(sTxt)
|
||||||
|
Next nRow
|
||||||
|
End Function
|
20
src/ParametersSearch.cls
Normal file
20
src/ParametersSearch.cls
Normal file
|
@ -0,0 +1,20 @@
|
||||||
|
VERSION 1.0 CLASS
|
||||||
|
BEGIN
|
||||||
|
MultiUse = -1 'True
|
||||||
|
END
|
||||||
|
Attribute VB_Name = "ParametersSearch"
|
||||||
|
Attribute VB_GlobalNameSpace = False
|
||||||
|
Attribute VB_Creatable = False
|
||||||
|
Attribute VB_PredeclaredId = False
|
||||||
|
Attribute VB_Exposed = False
|
||||||
|
Option Explicit
|
||||||
|
|
||||||
|
Public searchWhere_ As Excel.Range
|
||||||
|
Public searchWhat_ As Excel.Range
|
||||||
|
|
||||||
|
Public partialMatch_ As Boolean
|
||||||
|
Public normalize_ As Boolean
|
||||||
|
Public outputText_ As Boolean
|
||||||
|
|
||||||
|
Public ignoreSmall_ As Boolean
|
||||||
|
Public smallSize_ As Long
|
639
src/PublicFunctions.bas
Normal file
639
src/PublicFunctions.bas
Normal file
|
@ -0,0 +1,639 @@
|
||||||
|
Attribute VB_Name = "PublicFunctions"
|
||||||
|
' User defined function to use in Cells formula
|
||||||
|
Option Explicit
|
||||||
|
|
||||||
|
Private Const BLANKS_LIMIT = 300
|
||||||
|
|
||||||
|
Public Sub RegisterUDF()
|
||||||
|
Dim xlApp As Excel.Application: Set xlApp = ThisWorkbook.Application
|
||||||
|
|
||||||
|
Call xlApp.MacroOptions(Macro:="RS_ToASCII", Category:="CONCEPT_RS", _
|
||||||
|
Description:="Ïðåîáðàçîâàòü ðîäîñòðóêòóðíûé Unicode â ASCII")
|
||||||
|
Call xlApp.MacroOptions(Macro:="RS_ToMath", Category:="CONCEPT_RS", _
|
||||||
|
Description:="Ïðåîáðàçîâàòü ðîäîñòðóêòóðíûé ASCII â Unicode")
|
||||||
|
Call xlApp.MacroOptions(Macro:="RS_ToTree", Category:="CONCEPT_RS", _
|
||||||
|
Description:="Ðàçîáðàòü ñòðóêòóðó ðîäîñòðóêòóðíîãî ASCII è âûâåñòè äåðåâî ðàçáîðà")
|
||||||
|
|
||||||
|
Call xlApp.MacroOptions(Macro:="PY_Parse", Category:="CONCEPT_PYTHON", _
|
||||||
|
Description:="Èçâëå÷ü ìîðôîëîãè÷åñêèå òåãè ñëîâîñî÷åòàíèÿ" & vbNewLine & _
|
||||||
|
"Âòîðîé ïàðàìåòð óêàçûâàåò òåãè, êîòîðûå òî÷íî äîëæíû áûòü â ðàçáîðå")
|
||||||
|
Call xlApp.MacroOptions(Macro:="PY_Normalize", Category:="CONCEPT_PYTHON", _
|
||||||
|
Description:="Ïðåîáðàçîâàòü ñëîâîñî÷åòàíèå ê íà÷àëüíîé ôîðìå")
|
||||||
|
Call xlApp.MacroOptions(Macro:="PY_Inflect", Category:="CONCEPT_PYTHON", _
|
||||||
|
Description:="Ïðåîáðàçîâàòü ñëîâîñî÷åòàíèå ê ôîðìå ñ çàäàííûìè òåãàìè")
|
||||||
|
Call xlApp.MacroOptions(Macro:="PY_InflectSubstitute", Category:="CONCEPT_PYTHON", _
|
||||||
|
Description:="Ïðåîáðàçîâàòü ñëîâîñî÷åòàíèå ê ôîðìå, ñîîòâåòñòâóþùåé äðóãîìó ñëîâîñî÷åòàíèþ" & vbNewLine & _
|
||||||
|
"Ïåðâûé ïàðàìåòð çàäàåò ñëîâîñî÷åòàíèå, ôîðìó êîòîðîãî íåîáõîäèìî èçìåíèòü" & vbNewLine & _
|
||||||
|
"Âòîðîé ïàðàìåòð çàäàåò ýòàëîí")
|
||||||
|
Call xlApp.MacroOptions(Macro:="PY_InflectDependant", Category:="CONCEPT_PYTHON", _
|
||||||
|
Description:="Ïðåîáðàçîâàòü ñëîâîñî÷åòàíèå ê ôîðìå, ñîãëàñîâàííîé ñ óêàçàííûì ñëîâîñî÷åòàíèåì" & vbNewLine & _
|
||||||
|
"Âòîðîé ïàðàìåòð çàäàåò ñëîâîñî÷åòàíèå, ñ êîòîðûì íåîáõîäèìî ñîãëàñîâàòü öåëåâîå")
|
||||||
|
Call xlApp.MacroOptions(Macro:="PY_InflectContext", Category:="CONCEPT_PYTHON", _
|
||||||
|
Description:="Ïðåîáðàçîâàòü ñëîâîñî÷åòàíèå ê ôîðìå, îïðåäåëÿåìîé åãî îêðóæåíèåì" & vbNewLine & _
|
||||||
|
"Âòîðîé ïàðàìåòð çàäàåò ñëîâîñî÷åòàíèå ÄÎ öåëåâîãî" & vbNewLine & _
|
||||||
|
"Òðåòèé ïàðàìåòð çàäàåò ñëîâîñî÷åòàíèå ÏÎÑËÅ öåëåâîãî")
|
||||||
|
Call xlApp.MacroOptions(Macro:="PY_FindSubstr", Category:="CONCEPT_PYTHON", _
|
||||||
|
Description:="Ïðîâåðêà íà ïîäñòðîêó ñ ó÷åòîì ñëîâîôîðì")
|
||||||
|
|
||||||
|
Call xlApp.MacroOptions(Macro:="CC_AbbreviateText", Category:="CONCEPT", _
|
||||||
|
Description:="Ïðèìåíèòü ñîêðàùåíèÿ äëÿ ÔÎÈÂ")
|
||||||
|
Call xlApp.MacroOptions(Macro:="CC_TrimWhitespace", Category:="CONCEPT", _
|
||||||
|
Description:="Óäàëèòü ïðîáåëû è ïåðåíîñû â íà÷àëå è êîíöå òåêñòà")
|
||||||
|
Call xlApp.MacroOptions(Macro:="CC_TrimPunctuation", Category:="CONCEPT", _
|
||||||
|
Description:="Óäàëèòü çíàêè ïóíêòóöèè â êîíöå òåêñòà")
|
||||||
|
Call xlApp.MacroOptions(Macro:="CC_SubstituteWhitespace", Category:="CONCEPT", _
|
||||||
|
Description:="Çàìåíèòü âñå ñïåö. ñèìâîëû íà ïðîáåëû")
|
||||||
|
|
||||||
|
Call xlApp.MacroOptions(Macro:="CC_CutRight", Category:="CONCEPT", _
|
||||||
|
Description:="Îáðàçàòü òåêñò ñïðàâà îò ïðåâîãî âõîæäåíèÿ ïîäñòðîêè" & vbNewLine & _
|
||||||
|
"cutWhat - îáðåçàåìûé òåêñò" & vbNewLine & _
|
||||||
|
"cutWhere - ñòðîêà-ðàçäåëèòåëü" & vbNewLine & _
|
||||||
|
"[keepDelim=FALSE] - îñòàâëÿòü ðàçäåëèòåëü â èòîãîâîé ñòðîêå")
|
||||||
|
|
||||||
|
Call xlApp.MacroOptions(Macro:="CC_CutLeft", Category:="CONCEPT", _
|
||||||
|
Description:="Îáðàçàòü òåêñò ñëåâà îò ïðåâîãî âõîæäåíèÿ ïîäñòðîêè" & vbNewLine & _
|
||||||
|
"cutWhat - îáðåçàåìûé òåêñò" & vbNewLine & _
|
||||||
|
"cutWhere - ñòðîêà-ðàçäåëèòåëü")
|
||||||
|
|
||||||
|
Call xlApp.MacroOptions(Macro:="CC_CountColor", Category:="CONCEPT", _
|
||||||
|
Description:="Ïîäñ÷åò êîëè÷åñòâà ÿ÷ååê ñ çàäàííûì öâåòîì" & vbNewLine & _
|
||||||
|
"rData - ìàññèâ ÿ÷ååê äëÿ àíàëèçà" & vbNewLine & _
|
||||||
|
"rCriteria - ÿ÷åéêà, ñîäåðæàùàÿ èñêîìûé öâåò")
|
||||||
|
|
||||||
|
Call xlApp.MacroOptions(Macro:="CC_FileMD5", Category:="CONCEPT", _
|
||||||
|
Description:="Âû÷èñëèòü õåø-ñóììó ôàéëà ïî àëãîðèòìó MD5")
|
||||||
|
Call xlApp.MacroOptions(Macro:="CC_FileSHA1", Category:="CONCEPT", _
|
||||||
|
Description:="Âû÷èñëèòü õåø-ñóììó ôàéëà ïî àëãîðèòìó SAH1")
|
||||||
|
|
||||||
|
Call xlApp.MacroOptions(Macro:="CC_ExtactFileName", Category:="CONCEPT", _
|
||||||
|
Description:="Âûäåëèòü èìÿ ôàéëà")
|
||||||
|
Call xlApp.MacroOptions(Macro:="CC_ExtactFileNameText", Category:="CONCEPT", _
|
||||||
|
Description:="Âûäåëèòü èìÿ ôàéëà áåç ðàñøèðåíèÿ")
|
||||||
|
Call xlApp.MacroOptions(Macro:="CC_ExtactFileExtension", Category:="CONCEPT", _
|
||||||
|
Description:="Âûäåëèòü ðàñøèðåíèå ôàéëà")
|
||||||
|
Call xlApp.MacroOptions(Macro:="CC_ExtactFolderName", Category:="CONCEPT", _
|
||||||
|
Description:="Âûäåëèòü ïàïêó, ñîäåðæàùóþ ôàéë")
|
||||||
|
|
||||||
|
Call xlApp.MacroOptions(Macro:="CC_HyperlinkToString", Category:="CONCEPT", _
|
||||||
|
Description:="Èçâëå÷ü ãèïåðññûëêó êàê òåêñò")
|
||||||
|
|
||||||
|
Call xlApp.MacroOptions(Macro:="CC_MatchCount", Category:="CONCEPT", _
|
||||||
|
Description:="Ïîäñ÷èòàòü êîëè÷åñòâî âõîæäåíèé îäíîé ñòðîêè â äðóãóþ")
|
||||||
|
Call xlApp.MacroOptions(Macro:="CC_MatchMultiple", Category:="CONCEPT", _
|
||||||
|
Description:="Îòáîð ïîäìíîæåñòâà èñêîìûõ ñòðîê, âõîäÿùèõ â äàííóþ" & vbNewLine & _
|
||||||
|
"target - öåëåâîé òåêñò" & vbNewLine & _
|
||||||
|
"iMatchList - èñêîìûå òåêñòû" & vbNewLine & _
|
||||||
|
"[nMode=1] - ðåæèì ñðàâíåíèÿ" & vbNewLine & _
|
||||||
|
"1 - (ïî óìîë÷àíèþ) - ñðàâíåíèå áåç èçìåíåíèé" & vbNewLine & _
|
||||||
|
"2 - ïðîáåë ñëåâà" & vbNewLine & _
|
||||||
|
"3 - ïðîáåë ñïðàâà" & vbNewLine & _
|
||||||
|
"4 - ïðîáåë ñëåâà è ñïðàâà")
|
||||||
|
Call xlApp.MacroOptions(Macro:="CC_LookupSubstr", Category:="CONCEPT", _
|
||||||
|
Description:="Àíàëîã ÂÏÐ (HLOOKUP), â êîòîðîì ïîèñê èäåò íå ïî ñîâïàäåíèþ, à ïî ïîäñòðîêå")
|
||||||
|
Call xlApp.MacroOptions(Macro:="CC_LongestDuplicatePrefix", Category:="CONCEPT", _
|
||||||
|
Description:="Ñàìûé äëèííûé ïðåôèêñ, ïîâòîðÿþùèéñÿ õîòÿ áû â 2 ñòðîêàõ èç çàäàíîãî íàáîðà")
|
||||||
|
Call xlApp.MacroOptions(Macro:="CC_LongestDuplicateSuffix", Category:="CONCEPT", _
|
||||||
|
Description:="Ñàìûé äëèííûé ñóôôèêñ, ïîâòîðÿþùèéñÿ õîòÿ áû â 2 ñòðîêàõ èç çàäàíîãî íàáîðà")
|
||||||
|
Call xlApp.MacroOptions(Macro:="CC_SLOW_LongestDuplicateSubstring", Category:="CONCEPT", _
|
||||||
|
Description:="Ñàìàÿ äëèííàÿ ïîäñòðîêà, ïîâòîðÿþùàÿñÿ õîòÿ áû â 2 ñòðîêàõ èç çàäàíîãî íàáîðà" & vbNewLine & _
|
||||||
|
"Âíèìàíèå! Ïðîèçâîäèòåëüíîñòü î÷åíü ñèëüíî ïàäàåò ñ óâåëè÷åíèåì äëèíû ñòðîêè è êîëè÷åñòâà ñòðîê")
|
||||||
|
|
||||||
|
Call xlApp.MacroOptions(Macro:="CC_LookupMulti", Category:="CONCEPT", _
|
||||||
|
Description:="Ïîèñê çàäàííîãî â ïåðâîì ñòîëáöå àðãóìåíòà 1 íàáîðà ïîäñòðîê â çàäàííîé äëÿ ïîèñêà ñòðîêå àðãóìåíòà 2." & vbNewLine & _
|
||||||
|
"Âîçâðàùàåò òåêñò â ñòîëáöå ñ íîìåðîì = àðãóìåíò 3 â ñòðî÷êå, ñòðîêà ïåðâîãî ñòîëáöà êîòîðîé áûëà íàéäåíà â àðãóìåíòå 2")
|
||||||
|
Call xlApp.MacroOptions(Macro:="CC_LookupMultiCount", Category:="CONCEPT", _
|
||||||
|
Description:="Ïðèíöèï ðàáîòû àíàëîãè÷åí LookupMulti, íî âîçâðàùàåò êîëè÷åñòâî íàéäåííûõ ïîäñòðîê")
|
||||||
|
Call xlApp.MacroOptions(Macro:="CC_LookupMultiAll", Category:="CONCEPT", _
|
||||||
|
Description:="Ïðèíöèï ðàáîòû àíàëîãè÷åí LookupMulti, íî âîçâðàùàåò êîíêàòåíàöèþ ðåçóëüòàòîâ äëÿ âñåõ íàéäåííûõ ïîäñòðîê")
|
||||||
|
End Sub
|
||||||
|
|
||||||
|
Public Sub UnregisterUDF()
|
||||||
|
Call UnregisterMacto("RS_ToASCII")
|
||||||
|
Call UnregisterMacto("RS_ToMath")
|
||||||
|
Call UnregisterMacto("RS_ToTree")
|
||||||
|
Call UnregisterMacto("PY_Parse")
|
||||||
|
Call UnregisterMacto("PY_Normalize")
|
||||||
|
Call UnregisterMacto("PY_Inflect")
|
||||||
|
Call UnregisterMacto("PY_InflectSubstitute")
|
||||||
|
Call UnregisterMacto("PY_InflectContext")
|
||||||
|
Call UnregisterMacto("PY_InflectDependant")
|
||||||
|
Call UnregisterMacto("PY_FindSubstr")
|
||||||
|
Call UnregisterMacto("CC_AbbreviateText")
|
||||||
|
Call UnregisterMacto("CC_TrimWhitespace")
|
||||||
|
Call UnregisterMacto("CC_TrimPunctuation")
|
||||||
|
Call UnregisterMacto("CC_CutRight")
|
||||||
|
Call UnregisterMacto("CC_CutLeft")
|
||||||
|
Call UnregisterMacto("CC_CountColor")
|
||||||
|
Call UnregisterMacto("CC_FileMD5")
|
||||||
|
Call UnregisterMacto("CC_FileSHA1")
|
||||||
|
Call UnregisterMacto("CC_ExtactFileName")
|
||||||
|
Call UnregisterMacto("CC_ExtactFileNameText")
|
||||||
|
Call UnregisterMacto("CC_ExtactFileExtension")
|
||||||
|
Call UnregisterMacto("CC_ExtactFolderName")
|
||||||
|
Call UnregisterMacto("CC_HyperlinkToString")
|
||||||
|
Call UnregisterMacto("CC_SubstituteWhitespace")
|
||||||
|
Call UnregisterMacto("CC_MatchCount")
|
||||||
|
Call UnregisterMacto("CC_MatchMultiple")
|
||||||
|
Call UnregisterMacto("CC_LookupSubstr")
|
||||||
|
Call UnregisterMacto("CC_LongestDuplicatePrefix")
|
||||||
|
Call UnregisterMacto("CC_LongestDuplicateSuffix")
|
||||||
|
Call UnregisterMacto("CC_SLOW_LongestDuplicateSubstring")
|
||||||
|
Call UnregisterMacto("CC_LookupMulti")
|
||||||
|
Call UnregisterMacto("CC_LookupMulti")
|
||||||
|
Call UnregisterMacto("CC_LookupMultiCount")
|
||||||
|
Call UnregisterMacto("CC_LookupMultiAll")
|
||||||
|
End Sub
|
||||||
|
|
||||||
|
Public Function RS_ToASCII(sUnicodeText$) As String
|
||||||
|
Attribute RS_ToASCII.VB_Description = "Ïðåîáðàçîâàòü ðîäîñòðóêòóðíûé Unicode â ASCII"
|
||||||
|
Attribute RS_ToASCII.VB_ProcData.VB_Invoke_Func = " \n20"
|
||||||
|
RS_ToASCII = MathToASCII(sUnicodeText)
|
||||||
|
End Function
|
||||||
|
|
||||||
|
Public Function RS_ToMath(sAsciiText$) As String
|
||||||
|
Attribute RS_ToMath.VB_Description = "Ïðåîáðàçîâàòü ðîäîñòðóêòóðíûé ASCII â Unicode"
|
||||||
|
Attribute RS_ToMath.VB_ProcData.VB_Invoke_Func = " \n20"
|
||||||
|
RS_ToMath = ASCIItoMath(sAsciiText)
|
||||||
|
End Function
|
||||||
|
|
||||||
|
Public Function RS_ToTree(sAsciiText$) As String
|
||||||
|
Attribute RS_ToTree.VB_Description = "Ðàçîáðàòü ñòðóêòóðó ðîäîñòðóêòóðíîãî ASCII è âûâåñòè äåðåâî ðàçáîðà"
|
||||||
|
Attribute RS_ToTree.VB_ProcData.VB_Invoke_Func = " \n20"
|
||||||
|
RS_ToTree = ASCIItoAST(sAsciiText)
|
||||||
|
End Function
|
||||||
|
|
||||||
|
Public Function PY_Parse(sTarget$, Optional sTags$ = "") As String
|
||||||
|
Attribute PY_Parse.VB_Description = "Èçâëå÷ü ìîðôîëîãè÷åñêèå òåãè ñëîâîñî÷åòàíèÿ\r\nÂòîðîé ïàðàìåòð óêàçûâàåò òåãè, êîòîðûå òî÷íî äîëæíû áûòü â ðàçáîðå"
|
||||||
|
Attribute PY_Parse.VB_ProcData.VB_Invoke_Func = " \n21"
|
||||||
|
PY_Parse = AccessPython.CallFunction(PY_MODULE_TEXT, "parse", Array(sTarget, sTags))
|
||||||
|
End Function
|
||||||
|
|
||||||
|
Public Function PY_Normalize(sTarget$) As String
|
||||||
|
Attribute PY_Normalize.VB_Description = "Ïðåîáðàçîâàòü ñëîâîñî÷åòàíèå ê íà÷àëüíîé ôîðìå"
|
||||||
|
Attribute PY_Normalize.VB_ProcData.VB_Invoke_Func = " \n21"
|
||||||
|
PY_Normalize = AccessPython.CallFunction(PY_MODULE_TEXT, "normalize", Array(sTarget))
|
||||||
|
End Function
|
||||||
|
|
||||||
|
Public Function PY_Inflect(sTarget$, sTags$) As String
|
||||||
|
Attribute PY_Inflect.VB_Description = "Ïðåîáðàçîâàòü ñëîâîñî÷åòàíèå ê ôîðìå ñ çàäàííûìè òåãàìè"
|
||||||
|
Attribute PY_Inflect.VB_ProcData.VB_Invoke_Func = " \n21"
|
||||||
|
PY_Inflect = AccessPython.CallFunction(PY_MODULE_TEXT, "inflect", Array(sTarget, sTags))
|
||||||
|
End Function
|
||||||
|
|
||||||
|
Public Function PY_InflectSubstitute(sTarget$, sOriginal$) As String
|
||||||
|
Attribute PY_InflectSubstitute.VB_Description = "Ïðåîáðàçîâàòü ñëîâîñî÷åòàíèå ê ôîðìå, ñîîòâåòñòâóþùåé äðóãîìó ñëîâîñî÷åòàíèþ\r\nÏåðâûé ïàðàìåòð çàäàåò ñëîâîñî÷åòàíèå, ôîðìó êîòîðîãî íåîáõîäèìî èçìåíèòü\r\nÂòîðîé ïàðàìåòð çàäàåò ýòàëîí"
|
||||||
|
Attribute PY_InflectSubstitute.VB_ProcData.VB_Invoke_Func = " \n21"
|
||||||
|
PY_InflectSubstitute = AccessPython.CallFunction(PY_MODULE_TEXT, "inflect_substitute", Array(sTarget, sOriginal))
|
||||||
|
End Function
|
||||||
|
|
||||||
|
Public Function PY_InflectDependant(sTarget$, sMaster$) As String
|
||||||
|
Attribute PY_InflectDependant.VB_Description = "Ïðåîáðàçîâàòü ñëîâîñî÷åòàíèå ê ôîðìå, ñîãëàñîâàííîé ñ óêàçàííûì ñëîâîñî÷åòàíèåì\r\nÂòîðîé ïàðàìåòð çàäàåò ñëîâîñî÷åòàíèå, ñ êîòîðûì íåîáõîäèìî ñîãëàñîâàòü öåëåâîå"
|
||||||
|
Attribute PY_InflectDependant.VB_ProcData.VB_Invoke_Func = " \n21"
|
||||||
|
PY_InflectDependant = AccessPython.CallFunction(PY_MODULE_TEXT, "inflect_dependant", Array(sTarget, sMaster))
|
||||||
|
End Function
|
||||||
|
|
||||||
|
Public Function PY_InflectContext(sTarget$, Optional sBefore$ = "", Optional sAfter$ = "") As String
|
||||||
|
Attribute PY_InflectContext.VB_Description = "Ïðåîáðàçîâàòü ñëîâîñî÷åòàíèå ê ôîðìå, îïðåäåëÿåìîé åãî îêðóæåíèåì\r\nÂòîðîé ïàðàìåòð çàäàåò ñëîâîñî÷åòàíèå ÄÎ öåëåâîãî\r\nÒðåòèé ïàðàìåòð çàäàåò ñëîâîñî÷åòàíèå ÏÎÑËÅ öåëåâîãî"
|
||||||
|
Attribute PY_InflectContext.VB_ProcData.VB_Invoke_Func = " \n21"
|
||||||
|
PY_InflectContext = AccessPython.CallFunction(PY_MODULE_TEXT, "inflect_context", Array(sTarget, sBefore, sAfter))
|
||||||
|
End Function
|
||||||
|
|
||||||
|
Public Function PY_FindSubstr(sHaystack$, sNeedle$) As String
|
||||||
|
Attribute PY_FindSubstr.VB_Description = "Ïðîâåðêà íà ïîäñòðîêó ñ ó÷åòîì ñëîâîôîðì"
|
||||||
|
Attribute PY_FindSubstr.VB_ProcData.VB_Invoke_Func = " \n21"
|
||||||
|
Dim result As Variant:
|
||||||
|
result = AccessPython.CallFunction(PY_MODULE_TEXT, "find_substr", Array(sHaystack, sNeedle))
|
||||||
|
PY_FindSubstr = Fmt("{1},{2}", result(0), result(1))
|
||||||
|
End Function
|
||||||
|
|
||||||
|
Public Function CC_AbbreviateText(target$) As String
|
||||||
|
Attribute CC_AbbreviateText.VB_Description = "Ïðèìåíèòü ñîêðàùåíèÿ äëÿ ÔÎÈÂ"
|
||||||
|
Attribute CC_AbbreviateText.VB_ProcData.VB_Invoke_Func = " \n22"
|
||||||
|
CC_AbbreviateText = ApplyCommonAbbreviations(target)
|
||||||
|
End Function
|
||||||
|
|
||||||
|
Public Function CC_TrimWhitespace(target$) As String
|
||||||
|
Attribute CC_TrimWhitespace.VB_Description = "Óäàëèòü ïðîáåëû è ïåðåíîñû â íà÷àëå è êîíöå òåêñòà"
|
||||||
|
Attribute CC_TrimWhitespace.VB_ProcData.VB_Invoke_Func = " \n22"
|
||||||
|
CC_TrimWhitespace = TrimWhitespace(target)
|
||||||
|
End Function
|
||||||
|
|
||||||
|
Public Function CC_TrimPunctuation(target$) As String
|
||||||
|
Attribute CC_TrimPunctuation.VB_Description = "Óäàëèòü çíàêè ïóíêòóöèè â êîíöå òåêñòà"
|
||||||
|
Attribute CC_TrimPunctuation.VB_ProcData.VB_Invoke_Func = " \n22"
|
||||||
|
CC_TrimPunctuation = TrimEndPunctuation(target)
|
||||||
|
End Function
|
||||||
|
|
||||||
|
Public Function CC_CutRight(cutWhat$, cutWhere$, Optional keepDelim As Boolean = False) As String
|
||||||
|
Attribute CC_CutRight.VB_Description = "Îáðàçàòü òåêñò ñïðàâà îò ïðåâîãî âõîæäåíèÿ ïîäñòðîêè\r\ncutWhat - îáðåçàåìûé òåêñò\r\ncutWhere - ñòðîêà-ðàçäåëèòåëü\r\n[keepDelim=FALSE] - îñòàâëÿòü ðàçäåëèòåëü â èòîãîâîé ñòðîêå"
|
||||||
|
Attribute CC_CutRight.VB_ProcData.VB_Invoke_Func = " \n22"
|
||||||
|
' Ôóíêöèÿ äëÿ âûäåëåíèÿ ïðàâîé ïîäñòðîêè îòíîñèòåëüíî ïåðâîãî âõîæäåíèÿ çàäàííîé ïîäñòðîêè
|
||||||
|
Dim nPos&: nPos = VBA.InStr(1, cutWhat, cutWhere)
|
||||||
|
If nPos = 0 Then _
|
||||||
|
Exit Function
|
||||||
|
If keepDelim Then
|
||||||
|
CC_CutRight = VBA.Right(cutWhat, VBA.Len(cutWhat) - nPos + 1)
|
||||||
|
Else
|
||||||
|
CC_CutRight = VBA.Right(cutWhat, VBA.Len(cutWhat) - nPos + 1 - VBA.Len(cutWhere))
|
||||||
|
End If
|
||||||
|
End Function
|
||||||
|
|
||||||
|
Public Function CC_CutLeft(cutWhat$, cutWhere$) As String
|
||||||
|
Attribute CC_CutLeft.VB_Description = "Îáðàçàòü òåêñò ñëåâà îò ïðåâîãî âõîæäåíèÿ ïîäñòðîêè\r\ncutWhat - îáðåçàåìûé òåêñò\r\ncutWhere - ñòðîêà-ðàçäåëèòåëü"
|
||||||
|
Attribute CC_CutLeft.VB_ProcData.VB_Invoke_Func = " \n22"
|
||||||
|
' Ôóíêöèÿ äëÿ âûäåëåíèÿ ëåâîé ïîäñòðîêè îòíîñèòåëüíî ïåðâîãî âõîæäåíèÿ çàäàííîé ïîäñòðîêè
|
||||||
|
CC_CutLeft = cutWhat
|
||||||
|
Dim nPos&: nPos = VBA.InStr(1, cutWhat, cutWhere)
|
||||||
|
If nPos = 0 Then _
|
||||||
|
Exit Function
|
||||||
|
CC_CutLeft = VBA.Left(cutWhat, nPos - 1)
|
||||||
|
End Function
|
||||||
|
|
||||||
|
Public Function CC_CountColor(rData As Excel.Range, rCriteria As Excel.Range) As Long
|
||||||
|
Attribute CC_CountColor.VB_Description = "Ïîäñ÷åò êîëè÷åñòâà ÿ÷ååê ñ çàäàííûì öâåòîì\r\nrData - ìàññèâ ÿ÷ååê äëÿ àíàëèçà\r\nrCriteria - ÿ÷åéêà, ñîäåðæàùàÿ èñêîìûé öâåò"
|
||||||
|
Attribute CC_CountColor.VB_ProcData.VB_Invoke_Func = " \n22"
|
||||||
|
Dim aCell As Excel.Range
|
||||||
|
Dim xcolor&: xcolor = rCriteria.Interior.ColorIndex
|
||||||
|
For Each aCell In rData
|
||||||
|
If aCell.Interior.ColorIndex = xcolor Then _
|
||||||
|
CC_CountColor = CC_CountColor + 1
|
||||||
|
Next aCell
|
||||||
|
End Function
|
||||||
|
|
||||||
|
Public Function CC_FileMD5(sPath$) As String
|
||||||
|
Attribute CC_FileMD5.VB_Description = "Âû÷èñëèòü õåø-ñóììó ôàéëà ïî àëãîðèòìó MD5"
|
||||||
|
Attribute CC_FileMD5.VB_ProcData.VB_Invoke_Func = " \n22"
|
||||||
|
CC_FileMD5 = FileToMD5(sPath)
|
||||||
|
If CC_FileMD5 = vbNullString Then _
|
||||||
|
CC_FileMD5 = "File not found"
|
||||||
|
End Function
|
||||||
|
|
||||||
|
Public Function CC_FileSHA1(sPath$) As String
|
||||||
|
Attribute CC_FileSHA1.VB_Description = "Âû÷èñëèòü õåø-ñóììó ôàéëà ïî àëãîðèòìó SAH1"
|
||||||
|
Attribute CC_FileSHA1.VB_ProcData.VB_Invoke_Func = " \n22"
|
||||||
|
CC_FileSHA1 = FileToSHA1(sPath)
|
||||||
|
If CC_FileSHA1 = vbNullString Then _
|
||||||
|
CC_FileSHA1 = "File not found"
|
||||||
|
End Function
|
||||||
|
|
||||||
|
Public Function CC_ExtactFileName(sPath$) As String
|
||||||
|
Attribute CC_ExtactFileName.VB_Description = "Âûäåëèòü èìÿ ôàéëà"
|
||||||
|
Attribute CC_ExtactFileName.VB_ProcData.VB_Invoke_Func = " \n22"
|
||||||
|
Dim fso As New Scripting.FileSystemObject
|
||||||
|
CC_ExtactFileName = fso.GetFileName(sPath)
|
||||||
|
End Function
|
||||||
|
|
||||||
|
Public Function CC_ExtactFileNameText(sPath$) As String
|
||||||
|
Attribute CC_ExtactFileNameText.VB_Description = "Âûäåëèòü èìÿ ôàéëà áåç ðàñøèðåíèÿ"
|
||||||
|
Attribute CC_ExtactFileNameText.VB_ProcData.VB_Invoke_Func = " \n22"
|
||||||
|
Dim fso As New Scripting.FileSystemObject
|
||||||
|
CC_ExtactFileNameText = fso.GetBaseName(sPath)
|
||||||
|
End Function
|
||||||
|
|
||||||
|
Public Function CC_ExtactFileExtension(sPath$) As String
|
||||||
|
Attribute CC_ExtactFileExtension.VB_Description = "Âûäåëèòü ðàñøèðåíèå ôàéëà"
|
||||||
|
Attribute CC_ExtactFileExtension.VB_ProcData.VB_Invoke_Func = " \n22"
|
||||||
|
Dim fso As New Scripting.FileSystemObject
|
||||||
|
CC_ExtactFileExtension = fso.GetExtensionName(sPath)
|
||||||
|
End Function
|
||||||
|
|
||||||
|
Public Function CC_ExtactFolderName(sPath$) As String
|
||||||
|
Attribute CC_ExtactFolderName.VB_Description = "Âûäåëèòü ïàïêó, ñîäåðæàùóþ ôàéë"
|
||||||
|
Attribute CC_ExtactFolderName.VB_ProcData.VB_Invoke_Func = " \n22"
|
||||||
|
Dim fso As New Scripting.FileSystemObject
|
||||||
|
CC_ExtactFolderName = fso.GetParentFolderName(sPath)
|
||||||
|
End Function
|
||||||
|
|
||||||
|
Public Function CC_HyperlinkToString(aCell As Excel.Range) As String
|
||||||
|
Attribute CC_HyperlinkToString.VB_Description = "Èçâëå÷ü ãèïåðññûëêó êàê òåêñò"
|
||||||
|
Attribute CC_HyperlinkToString.VB_ProcData.VB_Invoke_Func = " \n22"
|
||||||
|
If aCell.Hyperlinks.Count > 0 Then
|
||||||
|
With aCell.Hyperlinks(1)
|
||||||
|
CC_HyperlinkToString = .Address
|
||||||
|
If .SubAddress <> vbNullString Then _
|
||||||
|
CC_HyperlinkToString = CC_HyperlinkToString + "#" + .SubAddress
|
||||||
|
End With
|
||||||
|
End If
|
||||||
|
End Function
|
||||||
|
|
||||||
|
Public Function CC_SubstituteWhitespace(target$) As String
|
||||||
|
Attribute CC_SubstituteWhitespace.VB_Description = "Çàìåíèòü âñå ñïåö. ñèìâîëû íà ïðîáåëû"
|
||||||
|
Attribute CC_SubstituteWhitespace.VB_ProcData.VB_Invoke_Func = " \n22"
|
||||||
|
CC_SubstituteWhitespace = SubstituteWhitespace(target)
|
||||||
|
End Function
|
||||||
|
|
||||||
|
Public Function CC_MatchCount(target$, iMatch$) As Long
|
||||||
|
Attribute CC_MatchCount.VB_Description = "Ïîäñ÷èòàòü êîëè÷åñòâî âõîæäåíèé îäíîé ñòðîêè â äðóãóþ"
|
||||||
|
Attribute CC_MatchCount.VB_ProcData.VB_Invoke_Func = " \n22"
|
||||||
|
CC_MatchCount = (VBA.Len(target) - VBA.Len(VBA.Replace(target, iMatch, "", Compare:=vbTextCompare))) / VBA.Len(iMatch)
|
||||||
|
End Function
|
||||||
|
|
||||||
|
Public Function CC_MatchMultiple(target$, iMatchList As Excel.Range, Optional nMode As TMatchMode = T_MM_DEFAULT) As String
|
||||||
|
Attribute CC_MatchMultiple.VB_Description = "Îòáîð ïîäìíîæåñòâà èñêîìûõ ñòðîê, âõîäÿùèõ â äàííóþ\r\ntarget - öåëåâîé òåêñò\r\niMatchList - èñêîìûå òåêñòû\r\n[nMode=1] - ðåæèì ñðàâíåíèÿ\r\n1 - (ïî óìîë÷àíèþ) - ñðàâíåíèå áåç èçìåíåíèé\r\n2 - ïðîáåë ñëåâà\r\n3 - ïðîáåë ñïðàâà\r\n4 - ïðîáåë ñëåâà è ñïðàâà"
|
||||||
|
Attribute CC_MatchMultiple.VB_ProcData.VB_Invoke_Func = " \n22"
|
||||||
|
Dim aCell As Excel.Range
|
||||||
|
Dim sMatch$
|
||||||
|
Dim sTarget$: sTarget = ApplyMatchMode(target, nMode)
|
||||||
|
For Each aCell In iMatchList
|
||||||
|
Dim sText$: sText = ApplyMatchMode(aCell.Text, nMode)
|
||||||
|
If VBA.InStr(1, sTarget, sText, vbTextCompare) <> 0 Then
|
||||||
|
If sMatch <> vbNullString Then _
|
||||||
|
sMatch = sMatch & ";"
|
||||||
|
sMatch = sMatch & aCell
|
||||||
|
End If
|
||||||
|
Next aCell
|
||||||
|
CC_MatchMultiple = sMatch
|
||||||
|
End Function
|
||||||
|
|
||||||
|
Public Function CC_LookupSubstr(sSearch$, iData As Excel.Range, nColumn&) As Variant
|
||||||
|
Attribute CC_LookupSubstr.VB_Description = "Àíàëîã ÂÏÐ (HLOOKUP), â êîòîðîì ïîèñê èäåò íå ïî ñîâïàäåíèþ, à ïî ïîäñòðîêå"
|
||||||
|
Attribute CC_LookupSubstr.VB_ProcData.VB_Invoke_Func = " \n22"
|
||||||
|
If nColumn > iData.Columns.Count Then
|
||||||
|
CC_LookupSubstr = CVErr(xlErrValue)
|
||||||
|
Exit Function
|
||||||
|
End If
|
||||||
|
|
||||||
|
Dim aCell As Excel.Range
|
||||||
|
Dim nBlank&: nBlank = 0
|
||||||
|
For Each aCell In iData.Columns(1).Cells
|
||||||
|
Dim sText$: sText = aCell.Text
|
||||||
|
If sText = "" Then
|
||||||
|
nBlank = nBlank + 1
|
||||||
|
If nBlank > BLANKS_LIMIT Then _
|
||||||
|
Exit Function
|
||||||
|
Else
|
||||||
|
nBlank = 0
|
||||||
|
End If
|
||||||
|
|
||||||
|
If VBA.InStr(1, sText, sSearch, vbTextCompare) <> 0 Then
|
||||||
|
CC_LookupSubstr = aCell.Offset(0, nColumn - 1).Text
|
||||||
|
Exit Function
|
||||||
|
End If
|
||||||
|
Next aCell
|
||||||
|
End Function
|
||||||
|
|
||||||
|
Public Function CC_LongestDuplicateSuffix(iData As Excel.Range, Optional nMaxLen& = 1000) As String
|
||||||
|
Attribute CC_LongestDuplicateSuffix.VB_Description = "Ñàìûé äëèííûé ñóôôèêñ, ïîâòîðÿþùèéñÿ õîòÿ áû â 2 ñòðîêàõ èç çàäàíîãî íàáîðà"
|
||||||
|
Attribute CC_LongestDuplicateSuffix.VB_ProcData.VB_Invoke_Func = " \n22"
|
||||||
|
Dim arrValue As Variant
|
||||||
|
arrValue = iData.Value
|
||||||
|
If ArraySize(arrValue, 2) <> 1 Then
|
||||||
|
CC_LongestDuplicateSuffix = CVErr(xlErrValue)
|
||||||
|
Exit Function
|
||||||
|
End If
|
||||||
|
If ArraySize(arrValue, 1) = 1 Then
|
||||||
|
CC_LongestDuplicateSuffix = ""
|
||||||
|
Exit Function
|
||||||
|
End If
|
||||||
|
|
||||||
|
Dim sInputs() As String: ReDim sInputs(1 To UBound(arrValue))
|
||||||
|
Dim nLens() As Long: ReDim nLens(1 To UBound(arrValue))
|
||||||
|
Dim nItem&
|
||||||
|
Dim nOut&: nOut = 1
|
||||||
|
Dim sCurrent$
|
||||||
|
Dim nCurrentLen&: nCurrentLen = 0
|
||||||
|
For nItem = 1 To UBound(arrValue)
|
||||||
|
sInputs(nOut) = VBA.Right$(CStr(arrValue(nItem, 1)), nMaxLen)
|
||||||
|
nLens(nOut) = VBA.Len(sInputs(nOut))
|
||||||
|
If nLens(nOut) <= nCurrentLen Then _
|
||||||
|
GoTo NEXT_ITEM
|
||||||
|
If nOut = 1 Then
|
||||||
|
nOut = nOut + 1
|
||||||
|
GoTo NEXT_ITEM
|
||||||
|
End If
|
||||||
|
|
||||||
|
Dim nCompare&
|
||||||
|
For nCompare = 1 To nOut - 1 Step 1
|
||||||
|
If nLens(nCompare) <= nCurrentLen Then _
|
||||||
|
GoTo NEXT_COMPARE
|
||||||
|
If VBA.Right$(sInputs(nOut), nCurrentLen + 1) <> VBA.Right$(sInputs(nCompare), nCurrentLen + 1) Then _
|
||||||
|
GoTo NEXT_COMPARE
|
||||||
|
|
||||||
|
Do
|
||||||
|
nCurrentLen = nCurrentLen + 1
|
||||||
|
If nLens(nCompare) <= nCurrentLen Or nLens(nOut) <= nCurrentLen Then _
|
||||||
|
Exit Do
|
||||||
|
If VBA.Mid$(sInputs(nOut), nLens(nOut) - nCurrentLen, 1) <> VBA.Mid$(sInputs(nCompare), nLens(nCompare) - nCurrentLen, 1) Then _
|
||||||
|
Exit Do
|
||||||
|
Loop
|
||||||
|
|
||||||
|
sCurrent = VBA.Right$(sInputs(nOut), nCurrentLen)
|
||||||
|
NEXT_COMPARE:
|
||||||
|
Next nCompare
|
||||||
|
|
||||||
|
nOut = nOut + 1
|
||||||
|
NEXT_ITEM:
|
||||||
|
Next nItem
|
||||||
|
|
||||||
|
CC_LongestDuplicateSuffix = sCurrent
|
||||||
|
End Function
|
||||||
|
|
||||||
|
Public Function CC_LongestDuplicatePrefix(iData As Excel.Range, Optional nMaxLen& = 1000) As String
|
||||||
|
Attribute CC_LongestDuplicatePrefix.VB_Description = "Ñàìûé äëèííûé ïðåôèêñ, ïîâòîðÿþùèéñÿ õîòÿ áû â 2 ñòðîêàõ èç çàäàíîãî íàáîðà"
|
||||||
|
Attribute CC_LongestDuplicatePrefix.VB_ProcData.VB_Invoke_Func = " \n22"
|
||||||
|
Dim arrValue As Variant
|
||||||
|
arrValue = iData.Value
|
||||||
|
If ArraySize(arrValue, 2) <> 1 Then
|
||||||
|
CC_LongestDuplicatePrefix = CVErr(xlErrValue)
|
||||||
|
Exit Function
|
||||||
|
End If
|
||||||
|
If ArraySize(arrValue, 1) = 1 Then
|
||||||
|
CC_LongestDuplicatePrefix = ""
|
||||||
|
Exit Function
|
||||||
|
End If
|
||||||
|
|
||||||
|
Dim sInputs() As String: ReDim sInputs(1 To UBound(arrValue))
|
||||||
|
Dim nLens() As Long: ReDim nLens(1 To UBound(arrValue))
|
||||||
|
Dim nItem&
|
||||||
|
Dim nOut&: nOut = 1
|
||||||
|
Dim sCurrent$
|
||||||
|
Dim nCurrentLen&: nCurrentLen = 0
|
||||||
|
For nItem = 1 To UBound(arrValue)
|
||||||
|
sInputs(nOut) = VBA.Left$(CStr(arrValue(nItem, 1)), nMaxLen)
|
||||||
|
nLens(nOut) = VBA.Len(sInputs(nOut))
|
||||||
|
If nLens(nOut) <= nCurrentLen Then _
|
||||||
|
GoTo NEXT_ITEM
|
||||||
|
If nOut = 1 Then
|
||||||
|
nOut = nOut + 1
|
||||||
|
GoTo NEXT_ITEM
|
||||||
|
End If
|
||||||
|
|
||||||
|
Dim nCompare&
|
||||||
|
For nCompare = 1 To nOut - 1 Step 1
|
||||||
|
If nLens(nCompare) <= nCurrentLen Then _
|
||||||
|
GoTo NEXT_COMPARE
|
||||||
|
If VBA.Left$(sInputs(nOut), nCurrentLen + 1) <> VBA.Left$(sInputs(nCompare), nCurrentLen + 1) Then _
|
||||||
|
GoTo NEXT_COMPARE
|
||||||
|
|
||||||
|
Do
|
||||||
|
nCurrentLen = nCurrentLen + 1
|
||||||
|
If nLens(nCompare) <= nCurrentLen Or nLens(nOut) <= nCurrentLen Then _
|
||||||
|
Exit Do
|
||||||
|
If VBA.Mid$(sInputs(nOut), nCurrentLen + 1, 1) <> VBA.Mid$(sInputs(nCompare), nCurrentLen + 1, 1) Then _
|
||||||
|
Exit Do
|
||||||
|
Loop
|
||||||
|
|
||||||
|
sCurrent = VBA.Left$(sInputs(nOut), nCurrentLen)
|
||||||
|
NEXT_COMPARE:
|
||||||
|
Next nCompare
|
||||||
|
|
||||||
|
nOut = nOut + 1
|
||||||
|
NEXT_ITEM:
|
||||||
|
Next nItem
|
||||||
|
|
||||||
|
CC_LongestDuplicatePrefix = sCurrent
|
||||||
|
End Function
|
||||||
|
|
||||||
|
Public Function CC_SLOW_LongestDuplicateSubstring(iData As Excel.Range) As String
|
||||||
|
Attribute CC_SLOW_LongestDuplicateSubstring.VB_Description = "Ñàìàÿ äëèííàÿ ïîäñòðîêà, ïîâòîðÿþùàÿñÿ õîòÿ áû â 2 ñòðîêàõ èç çàäàíîãî íàáîðà\r\nÂíèìàíèå! Ïðîèçâîäèòåëüíîñòü î÷åíü ñèëüíî ïàäàåò ñ óâåëè÷åíèåì äëèíû ñòðîêè è êîëè÷åñòâà ñòðîê"
|
||||||
|
Attribute CC_SLOW_LongestDuplicateSubstring.VB_ProcData.VB_Invoke_Func = " \n22"
|
||||||
|
Dim arrValue As Variant
|
||||||
|
arrValue = iData.Value
|
||||||
|
If ArraySize(arrValue, 2) <> 1 Then
|
||||||
|
CC_SLOW_LongestDuplicateSubstring = "ERR"
|
||||||
|
Exit Function
|
||||||
|
End If
|
||||||
|
If ArraySize(arrValue, 1) = 1 Then
|
||||||
|
CC_SLOW_LongestDuplicateSubstring = ""
|
||||||
|
Exit Function
|
||||||
|
End If
|
||||||
|
|
||||||
|
Dim sInputs() As String: ReDim sInputs(1 To UBound(arrValue))
|
||||||
|
Dim nLens() As Long: ReDim nLens(1 To UBound(arrValue))
|
||||||
|
Dim nItem&
|
||||||
|
For nItem = 1 To UBound(arrValue)
|
||||||
|
sInputs(nItem) = CStr(arrValue(nItem, 1))
|
||||||
|
nLens(nItem) = VBA.Len(sInputs(nItem))
|
||||||
|
Next nItem
|
||||||
|
|
||||||
|
CC_SLOW_LongestDuplicateSubstring = RunLCS(sInputs, nLens)
|
||||||
|
End Function
|
||||||
|
|
||||||
|
Public Function CC_LookupMulti(iData As Excel.Range, sText$, nResultColumn&) As Variant
|
||||||
|
Attribute CC_LookupMulti.VB_Description = "Ïîèñê çàäàííîãî â ïåðâîì ñòîëáöå àðãóìåíòà 1 íàáîðà ïîäñòðîê â çàäàííîé äëÿ ïîèñêà ñòðîêå àðãóìåíòà 2.\r\nÂîçâðàùàåò òåêñò â ñòîëáöå ñ íîìåðîì = àðãóìåíò 3 â ñòðî÷êå, ñòðîêà ïåðâîãî ñòîëáöà êîòîðîé áûëà íàéäåíà â àðãóìåíòå 2"
|
||||||
|
Attribute CC_LookupMulti.VB_ProcData.VB_Invoke_Func = " \n22"
|
||||||
|
If nResultColumn > iData.Columns.Count Then
|
||||||
|
CC_LookupMulti = CVErr(xlErrValue)
|
||||||
|
Exit Function
|
||||||
|
End If
|
||||||
|
|
||||||
|
Dim aCell As Excel.Range
|
||||||
|
Dim nBlank&: nBlank = 0
|
||||||
|
For Each aCell In iData.Columns(1).Cells
|
||||||
|
Dim sSearch$: sSearch = aCell.Text
|
||||||
|
If sSearch = "" Then
|
||||||
|
nBlank = nBlank + 1
|
||||||
|
If nBlank > BLANKS_LIMIT Then _
|
||||||
|
Exit Function
|
||||||
|
Else
|
||||||
|
nBlank = 0
|
||||||
|
End If
|
||||||
|
|
||||||
|
If VBA.InStr(1, sText, sSearch, vbTextCompare) <> 0 Then
|
||||||
|
CC_LookupMulti = aCell.Offset(0, nResultColumn - 1).Text
|
||||||
|
Exit Function
|
||||||
|
End If
|
||||||
|
Next aCell
|
||||||
|
CC_LookupMulti = ""
|
||||||
|
End Function
|
||||||
|
|
||||||
|
Public Function CC_LookupMultiCount(iData As Excel.Range, sText$) As Variant
|
||||||
|
Attribute CC_LookupMultiCount.VB_Description = "Ïðèíöèï ðàáîòû àíàëîãè÷åí LookupMulti, íî âîçâðàùàåò êîëè÷åñòâî íàéäåííûõ ïîäñòðîê"
|
||||||
|
Attribute CC_LookupMultiCount.VB_ProcData.VB_Invoke_Func = " \n22"
|
||||||
|
Dim aCell As Excel.Range
|
||||||
|
Dim nBlank&: nBlank = 0
|
||||||
|
CC_LookupMultiCount = 0
|
||||||
|
For Each aCell In iData.Columns(1).Cells
|
||||||
|
Dim sSearch$: sSearch = aCell.Text
|
||||||
|
If sSearch = "" Then
|
||||||
|
nBlank = nBlank + 1
|
||||||
|
If nBlank > BLANKS_LIMIT Then _
|
||||||
|
Exit Function
|
||||||
|
Else
|
||||||
|
nBlank = 0
|
||||||
|
End If
|
||||||
|
|
||||||
|
If VBA.InStr(1, sText, sSearch, vbTextCompare) <> 0 Then
|
||||||
|
CC_LookupMultiCount = CC_LookupMultiCount + 1
|
||||||
|
End If
|
||||||
|
Next aCell
|
||||||
|
End Function
|
||||||
|
|
||||||
|
Public Function CC_LookupMultiAll(iData As Excel.Range, sText$, nResultColumn&) As Variant
|
||||||
|
Attribute CC_LookupMultiAll.VB_Description = "Ïðèíöèï ðàáîòû àíàëîãè÷åí LookupMulti, íî âîçâðàùàåò êîíêàòåíàöèþ ðåçóëüòàòîâ äëÿ âñåõ íàéäåííûõ ïîäñòðîê"
|
||||||
|
Attribute CC_LookupMultiAll.VB_ProcData.VB_Invoke_Func = " \n22"
|
||||||
|
If nResultColumn > iData.Columns.Count Then
|
||||||
|
CC_LookupMultiAll = CVErr(xlErrValue)
|
||||||
|
Exit Function
|
||||||
|
End If
|
||||||
|
|
||||||
|
Dim aCell As Excel.Range
|
||||||
|
Dim nBlank&: nBlank = 0
|
||||||
|
CC_LookupMultiAll = ""
|
||||||
|
For Each aCell In iData.Columns(1).Cells
|
||||||
|
Dim sSearch$: sSearch = aCell.Text
|
||||||
|
If sSearch = "" Then
|
||||||
|
nBlank = nBlank + 1
|
||||||
|
If nBlank > BLANKS_LIMIT Then _
|
||||||
|
Exit Function
|
||||||
|
Else
|
||||||
|
nBlank = 0
|
||||||
|
End If
|
||||||
|
|
||||||
|
If VBA.InStr(1, sText, sSearch, vbTextCompare) <> 0 Then
|
||||||
|
If CC_LookupMultiAll <> "" Then _
|
||||||
|
CC_LookupMultiAll = CC_LookupMultiAll & ";"
|
||||||
|
CC_LookupMultiAll = CC_LookupMultiAll & aCell.Offset(0, nResultColumn - 1)
|
||||||
|
End If
|
||||||
|
Next aCell
|
||||||
|
End Function
|
||||||
|
|
||||||
|
' =======
|
||||||
|
Private Function UnregisterMacto(sMacro$)
|
||||||
|
On Error Resume Next
|
||||||
|
Call Excel.Application.MacroOptions(Macro:=sMacro, Category:=Empty, Description:=Empty)
|
||||||
|
End Function
|
||||||
|
|
||||||
|
Private Function ApplyMatchMode(sText$, nMode As TMatchMode) As String
|
||||||
|
Select Case nMode
|
||||||
|
Case T_MM_DEFAULT: ApplyMatchMode = sText
|
||||||
|
Case T_MM_SPACE_LEFT: ApplyMatchMode = " " & sText
|
||||||
|
Case T_MM_SPACE_RIGHT: ApplyMatchMode = sText & " "
|
||||||
|
Case T_MM_SPACE_BOTH: ApplyMatchMode = " " & sText & " "
|
||||||
|
End Select
|
||||||
|
End Function
|
||||||
|
|
||||||
|
Private Function RunLCS(sInputs() As String, nLens() As Long) As String
|
||||||
|
Dim sCurrent$
|
||||||
|
Dim nCurrentLen&: nCurrentLen = 0
|
||||||
|
|
||||||
|
Dim nSample&
|
||||||
|
For nSample = 1 To UBound(sInputs) - 1 Step 1
|
||||||
|
Dim nSampleLen&: nSampleLen = nLens(nSample)
|
||||||
|
If nSampleLen <= nCurrentLen Then _
|
||||||
|
GoTo NEXT_SAMPLE
|
||||||
|
|
||||||
|
Dim nSubstr&
|
||||||
|
Dim nPos&
|
||||||
|
Dim nCompare&
|
||||||
|
For nSubstr = nSampleLen To nCurrentLen + 1 Step -1
|
||||||
|
For nPos = 1 To nSampleLen - nSubstr + 1 Step 1
|
||||||
|
Dim sSample$: sSample = VBA.Mid$(sInputs(nSample), nPos, nSampleLen)
|
||||||
|
For nCompare = nSample + 1 To UBound(sInputs) Step 1
|
||||||
|
If nLens(nCompare) < nSampleLen Then _
|
||||||
|
GoTo NEXT_COMPARE
|
||||||
|
Dim nFound&: nFound = VBA.InStr(nPos, sInputs(nCompare), sSample, vbTextCompare)
|
||||||
|
If nFound <> 0 Then
|
||||||
|
nCurrentLen = nSubstr
|
||||||
|
sCurrent = sSample
|
||||||
|
GoTo NEXT_SAMPLE
|
||||||
|
End If
|
||||||
|
NEXT_COMPARE:
|
||||||
|
Next nCompare
|
||||||
|
Next nPos
|
||||||
|
Next nSubstr
|
||||||
|
NEXT_SAMPLE:
|
||||||
|
Next nSample
|
||||||
|
|
||||||
|
RunLCS = sCurrent
|
||||||
|
End Function
|
78
src/RelocateDlg.frm
Normal file
78
src/RelocateDlg.frm
Normal file
|
@ -0,0 +1,78 @@
|
||||||
|
VERSION 5.00
|
||||||
|
Begin {C62A69F0-16DC-11CE-9E98-00AA00574A4F} RelocateDlg
|
||||||
|
Caption = "Ïåðåíîñ ôàéëîâ ïî ññûëêàì"
|
||||||
|
ClientHeight = 1740
|
||||||
|
ClientLeft = 120
|
||||||
|
ClientTop = 465
|
||||||
|
ClientWidth = 6840
|
||||||
|
OleObjectBlob = "RelocateDlg.frx":0000
|
||||||
|
StartUpPosition = 1 'CenterOwner
|
||||||
|
End
|
||||||
|
Attribute VB_Name = "RelocateDlg"
|
||||||
|
Attribute VB_GlobalNameSpace = False
|
||||||
|
Attribute VB_Creatable = False
|
||||||
|
Attribute VB_PredeclaredId = True
|
||||||
|
Attribute VB_Exposed = False
|
||||||
|
Option Explicit
|
||||||
|
|
||||||
|
Private prefixInit_ As String
|
||||||
|
Private fso_ As Scripting.FileSystemObject
|
||||||
|
|
||||||
|
Public isCancelled_ As Boolean
|
||||||
|
|
||||||
|
Private Sub UserForm_Initialize()
|
||||||
|
isCancelled_ = True
|
||||||
|
Set fso_ = New Scripting.FileSystemObject
|
||||||
|
End Sub
|
||||||
|
|
||||||
|
Public Function Init(sFilesLocation$)
|
||||||
|
prefixInit_ = sFilesLocation
|
||||||
|
End Function
|
||||||
|
|
||||||
|
Public Property Get Path() As String
|
||||||
|
Path = TBTargetPath.Text
|
||||||
|
End Property
|
||||||
|
|
||||||
|
Public Property Get Prefix() As String
|
||||||
|
Prefix = TBPrefix.Text
|
||||||
|
End Property
|
||||||
|
|
||||||
|
' ====== Internal API
|
||||||
|
Private Sub OkBtn_Click()
|
||||||
|
If Not ValidateData Then
|
||||||
|
Call UserInteraction.ShowMessage(EM_RELOCATE_DATA_FAIL)
|
||||||
|
Else
|
||||||
|
isCancelled_ = False
|
||||||
|
Call Me.Hide
|
||||||
|
End If
|
||||||
|
End Sub
|
||||||
|
|
||||||
|
Private Sub CancelBtn_Click()
|
||||||
|
isCancelled_ = True
|
||||||
|
Call Me.Hide
|
||||||
|
End Sub
|
||||||
|
|
||||||
|
Private Sub BtnPrefix_Click()
|
||||||
|
Dim sFolder$: sFolder = UserInteraction.PromptFolder(prefixInit_ & "\")
|
||||||
|
If sFolder <> vbNullString Then _
|
||||||
|
TBPrefix.Text = sFolder
|
||||||
|
End Sub
|
||||||
|
|
||||||
|
Private Sub BtnTargetPath_Click()
|
||||||
|
Dim sFolder$: sFolder = UserInteraction.PromptFolder(ThisWorkbook.Path & "\")
|
||||||
|
If sFolder <> vbNullString Then _
|
||||||
|
TBTargetPath.Text = sFolder
|
||||||
|
End Sub
|
||||||
|
|
||||||
|
' =====
|
||||||
|
Private Function ValidateData() As Boolean
|
||||||
|
ValidateData = False
|
||||||
|
|
||||||
|
Dim sPath$: sPath = Path
|
||||||
|
If sPath = vbNullString Then _
|
||||||
|
Exit Function
|
||||||
|
If Not fso_.FolderExists(sPath) Then _
|
||||||
|
Exit Function
|
||||||
|
|
||||||
|
ValidateData = True
|
||||||
|
End Function
|
BIN
src/RelocateDlg.frx
Normal file
BIN
src/RelocateDlg.frx
Normal file
Binary file not shown.
96
src/SearchDlg.frm
Normal file
96
src/SearchDlg.frm
Normal file
|
@ -0,0 +1,96 @@
|
||||||
|
VERSION 5.00
|
||||||
|
Begin {C62A69F0-16DC-11CE-9E98-00AA00574A4F} SearchDlg
|
||||||
|
Caption = "Ïîèñê ñëîâîñî÷åòàíèé"
|
||||||
|
ClientHeight = 5370
|
||||||
|
ClientLeft = 120
|
||||||
|
ClientTop = 465
|
||||||
|
ClientWidth = 4575
|
||||||
|
OleObjectBlob = "SearchDlg.frx":0000
|
||||||
|
StartUpPosition = 1 'CenterOwner
|
||||||
|
End
|
||||||
|
Attribute VB_Name = "SearchDlg"
|
||||||
|
Attribute VB_GlobalNameSpace = False
|
||||||
|
Attribute VB_Creatable = False
|
||||||
|
Attribute VB_PredeclaredId = True
|
||||||
|
Attribute VB_Exposed = False
|
||||||
|
Option Explicit
|
||||||
|
|
||||||
|
Public isCancelled_ As Boolean
|
||||||
|
|
||||||
|
Private dataSource_ As Excel.Workbook
|
||||||
|
|
||||||
|
Public Function Init(targetWB As Excel.Workbook)
|
||||||
|
isCancelled_ = True
|
||||||
|
Set dataSource_ = targetWB
|
||||||
|
End Function
|
||||||
|
|
||||||
|
Public Function ResultParams() As ParametersSearch
|
||||||
|
Set ResultParams = New ParametersSearch
|
||||||
|
With ResultParams
|
||||||
|
.ignoreSmall_ = CBIgnoreWords.Value
|
||||||
|
.partialMatch_ = Not CBFindWhole.Value
|
||||||
|
.normalize_ = CBNormalize.Value
|
||||||
|
.outputText_ = CBOutputText.Value
|
||||||
|
.smallSize_ = TBSymbolLimit.Value
|
||||||
|
Set .searchWhere_ = Excel.Range(TBSearchRange.Text)
|
||||||
|
Set .searchWhat_ = Excel.Range(TBQueryRange.Text)
|
||||||
|
End With
|
||||||
|
End Function
|
||||||
|
|
||||||
|
Private Sub BtnCancel_Click()
|
||||||
|
isCancelled_ = True
|
||||||
|
Call Me.Hide
|
||||||
|
End Sub
|
||||||
|
|
||||||
|
Private Sub BtnOK_Click()
|
||||||
|
If Not ValidateData Then
|
||||||
|
Call UserInteraction.ShowMessage(EM_DIALOG_DATA_INVALID)
|
||||||
|
Else
|
||||||
|
isCancelled_ = False
|
||||||
|
Call Me.Hide
|
||||||
|
End If
|
||||||
|
End Sub
|
||||||
|
|
||||||
|
Private Sub BtnSearchRange_Click()
|
||||||
|
Call Me.Hide
|
||||||
|
|
||||||
|
Dim iRange As Excel.Range
|
||||||
|
On Error Resume Next
|
||||||
|
Set iRange = Excel.Application.InputBox( _
|
||||||
|
Title:="Âûáîð äèàïàçîíà ÿ÷ååê", _
|
||||||
|
Prompt:="Óêàæèòå äèàïàçîí, â êîòîðîì áóäåò ïðîõîäèòü ïîèñê", _
|
||||||
|
Type:=8)
|
||||||
|
On Error GoTo 0
|
||||||
|
|
||||||
|
If Not iRange Is Nothing Then _
|
||||||
|
TBSearchRange.Text = iRange.Address(External:=True)
|
||||||
|
|
||||||
|
Call Me.Show
|
||||||
|
End Sub
|
||||||
|
|
||||||
|
Private Sub BtnQueryRange_Click()
|
||||||
|
Call Me.Hide
|
||||||
|
|
||||||
|
Dim iRange As Excel.Range
|
||||||
|
On Error Resume Next
|
||||||
|
Set iRange = Excel.Application.InputBox( _
|
||||||
|
Title:="Âûáîð äèàïàçîíà ÿ÷ååê", _
|
||||||
|
Prompt:="Óêàæèòå äèàïàçîí, ñîäåðæàùèé èñêîìûå ôðàçû", _
|
||||||
|
Type:=8)
|
||||||
|
On Error GoTo 0
|
||||||
|
|
||||||
|
If Not iRange Is Nothing Then _
|
||||||
|
TBQueryRange.Text = iRange.Address(External:=True)
|
||||||
|
|
||||||
|
Call Me.Show
|
||||||
|
End Sub
|
||||||
|
|
||||||
|
' ========
|
||||||
|
Private Function ValidateData() As Boolean
|
||||||
|
ValidateData = False
|
||||||
|
If TBQueryRange.Text = vbNullString Then _
|
||||||
|
Exit Function
|
||||||
|
If TBSearchRange.Text = vbNullString Then _
|
||||||
|
Exit Function
|
||||||
|
ValidateData = True
|
||||||
|
End Function
|
BIN
src/SearchDlg.frx
Normal file
BIN
src/SearchDlg.frx
Normal file
Binary file not shown.
267
src/SearchEngine.cls
Normal file
267
src/SearchEngine.cls
Normal file
|
@ -0,0 +1,267 @@
|
||||||
|
VERSION 1.0 CLASS
|
||||||
|
BEGIN
|
||||||
|
MultiUse = -1 'True
|
||||||
|
END
|
||||||
|
Attribute VB_Name = "SearchEngine"
|
||||||
|
Attribute VB_GlobalNameSpace = False
|
||||||
|
Attribute VB_Creatable = False
|
||||||
|
Attribute VB_PredeclaredId = False
|
||||||
|
Attribute VB_Exposed = False
|
||||||
|
Option Explicit
|
||||||
|
|
||||||
|
Private out_ As Excel.Worksheet
|
||||||
|
Private params_ As ParametersSearch
|
||||||
|
|
||||||
|
Private queryWords_ As Scripting.Dictionary
|
||||||
|
Private queryCount_ As Long
|
||||||
|
|
||||||
|
Private foundIDs_() As Collection
|
||||||
|
Private wordCounts_() As Long
|
||||||
|
|
||||||
|
Private Const PROGRESS_DICTIONARY = 10
|
||||||
|
Private Const PROGRESS_SEARCH = 89
|
||||||
|
Private Const PROGRESS_RESULTS = 1
|
||||||
|
|
||||||
|
Private Const MAX_COLUMNS = 250
|
||||||
|
|
||||||
|
' _SR_ - search results
|
||||||
|
Private Enum SearchResultStruct
|
||||||
|
[_First] = 1
|
||||||
|
|
||||||
|
S_SR_INPUT = 1
|
||||||
|
S_SR_COUNT = 2
|
||||||
|
S_SR_DATA = 3
|
||||||
|
|
||||||
|
[_Last] = 3
|
||||||
|
End Enum
|
||||||
|
|
||||||
|
Public Function Init(iOut As Excel.Worksheet, params As ParametersSearch)
|
||||||
|
Set out_ = iOut
|
||||||
|
Set params_ = params
|
||||||
|
If Not params_.ignoreSmall_ Then _
|
||||||
|
params_.smallSize_ = 0
|
||||||
|
End Function
|
||||||
|
|
||||||
|
Public Function Execute()
|
||||||
|
Call CSE_ProgressBar.Init("Ïîñëîâíûé ïîèñê", maxVal:=100, canInterrupt:=True)
|
||||||
|
Call CSE_ProgressBar.ShowModeless
|
||||||
|
|
||||||
|
CSE_ProgressBar.Description = "Ôîðìèðîâàíèå ñëîâàðÿ èç çàïðîñîâ..."
|
||||||
|
Call PrepareIndexDictionary
|
||||||
|
|
||||||
|
CSE_ProgressBar.Description = "Ïîèñê..."
|
||||||
|
Call ExecuteSearch
|
||||||
|
|
||||||
|
CSE_ProgressBar.Description = "Ñîõðàíåíèå ðåçóëüòàòîâ..."
|
||||||
|
Call FinalizeResults
|
||||||
|
Call CSE_ProgressBar.IncrementA(PROGRESS_RESULTS)
|
||||||
|
|
||||||
|
Call Unload(CSE_ProgressBar)
|
||||||
|
End Function
|
||||||
|
|
||||||
|
' ========
|
||||||
|
Private Function PrepareIndexDictionary()
|
||||||
|
queryCount_ = CountNonEmpty(params_.searchWhat_)
|
||||||
|
Call ResetWordCounts
|
||||||
|
Call CSE_ProgressBar.InitSecondBar(maxVal:=queryCount_)
|
||||||
|
|
||||||
|
Set queryWords_ = New Scripting.Dictionary
|
||||||
|
Dim nItem&: nItem = 1
|
||||||
|
Dim iCell As Excel.Range
|
||||||
|
Dim iWords As Collection
|
||||||
|
For Each iCell In params_.searchWhat_
|
||||||
|
Set iWords = ExtractWords(iCell.Text)
|
||||||
|
wordCounts_(nItem) = iWords.Count
|
||||||
|
|
||||||
|
Dim iWord As Variant
|
||||||
|
For Each iWord In iWords
|
||||||
|
If params_.normalize_ Then _
|
||||||
|
iWord = PY_Normalize(CStr(iWord))
|
||||||
|
If Not queryWords_.Exists(CStr(iWord)) Then _
|
||||||
|
Set queryWords_(CStr(iWord)) = New Collection
|
||||||
|
On Error Resume Next
|
||||||
|
Call queryWords_(CStr(iWord)).Add(nItem, CStr(nItem))
|
||||||
|
On Error GoTo 0
|
||||||
|
Next iWord
|
||||||
|
|
||||||
|
If nItem = queryCount_ Then _
|
||||||
|
Exit For
|
||||||
|
nItem = nItem + 1
|
||||||
|
Call CSE_ProgressBar.IncrementB
|
||||||
|
Call CSE_ProgressBar.SetA(PROGRESS_DICTIONARY * nItem / queryCount_)
|
||||||
|
Next iCell
|
||||||
|
|
||||||
|
Call CSE_ProgressBar.HideSecondBar
|
||||||
|
End Function
|
||||||
|
|
||||||
|
Private Function ExecuteSearch()
|
||||||
|
Dim nTextCount&: nTextCount = CountNonEmpty(params_.searchWhere_)
|
||||||
|
Call ResetFoundIDs
|
||||||
|
Call CSE_ProgressBar.InitSecondBar(maxVal:=nTextCount)
|
||||||
|
|
||||||
|
Dim nItem&: nItem = 1
|
||||||
|
Dim iCell As Excel.Range
|
||||||
|
Dim iWords As Collection
|
||||||
|
Dim iCounts As Scripting.Dictionary
|
||||||
|
Dim vQueryID As Variant
|
||||||
|
Dim iWord As Variant
|
||||||
|
|
||||||
|
For Each iCell In params_.searchWhere_
|
||||||
|
Set iCounts = New Scripting.Dictionary
|
||||||
|
Set iWords = ExtractWords(iCell.Text)
|
||||||
|
|
||||||
|
For Each iWord In iWords
|
||||||
|
If params_.normalize_ Then _
|
||||||
|
iWord = PY_Normalize(CStr(iWord))
|
||||||
|
If queryWords_.Exists(CStr(iWord)) Then
|
||||||
|
For Each vQueryID In queryWords_(CStr(iWord))
|
||||||
|
If Not iCounts.Exists(CStr(vQueryID)) Then _
|
||||||
|
iCounts(CStr(vQueryID)) = 0
|
||||||
|
iCounts(CStr(vQueryID)) = iCounts(CStr(vQueryID)) + 1
|
||||||
|
Next vQueryID
|
||||||
|
End If
|
||||||
|
Next iWord
|
||||||
|
|
||||||
|
For Each vQueryID In iCounts.Keys
|
||||||
|
If params_.partialMatch_ Or wordCounts_(CLng(vQueryID)) <= iCounts(vQueryID) Then _
|
||||||
|
Call foundIDs_(CLng(vQueryID)).Add(nItem, CStr(nItem))
|
||||||
|
Next vQueryID
|
||||||
|
|
||||||
|
If CSE_ProgressBar.Interrupted Or nItem = nTextCount Then _
|
||||||
|
Exit For
|
||||||
|
nItem = nItem + 1
|
||||||
|
Call CSE_ProgressBar.IncrementB
|
||||||
|
Call CSE_ProgressBar.SetA(PROGRESS_DICTIONARY + PROGRESS_SEARCH * nItem / nTextCount)
|
||||||
|
Next iCell
|
||||||
|
|
||||||
|
Call CSE_ProgressBar.HideSecondBar
|
||||||
|
End Function
|
||||||
|
|
||||||
|
Private Function FinalizeResults()
|
||||||
|
Call CSE_ProgressBar.InitSecondBar(maxVal:=queryCount_)
|
||||||
|
|
||||||
|
Dim nItem&: nItem = 1
|
||||||
|
Dim nCount&
|
||||||
|
|
||||||
|
Dim iCell As Excel.Range
|
||||||
|
For Each iCell In params_.searchWhat_
|
||||||
|
nCount = foundIDs_(nItem).Count
|
||||||
|
out_.Cells(nItem, S_SR_INPUT) = iCell
|
||||||
|
out_.Cells(nItem, S_SR_COUNT) = foundIDs_(nItem).Count
|
||||||
|
If nCount = 0 Then _
|
||||||
|
GoTo NEXT_ITEM
|
||||||
|
|
||||||
|
If params_.outputText_ Then
|
||||||
|
Call OutputWords(nItem)
|
||||||
|
Else
|
||||||
|
out_.Cells(nItem, 3) = ListIDs(nItem)
|
||||||
|
End If
|
||||||
|
|
||||||
|
NEXT_ITEM:
|
||||||
|
If nItem = queryCount_ Then _
|
||||||
|
Exit For
|
||||||
|
nItem = nItem + 1
|
||||||
|
Call CSE_ProgressBar.IncrementB
|
||||||
|
Next iCell
|
||||||
|
|
||||||
|
Call CSE_ProgressBar.HideSecondBar
|
||||||
|
End Function
|
||||||
|
|
||||||
|
Private Function ExtractWords(sText$) As Collection
|
||||||
|
Dim iWords As New Collection
|
||||||
|
Dim nStart&: nStart = 1
|
||||||
|
Dim nLen&: nLen = VBA.Len(sText)
|
||||||
|
Dim nCur&: nCur = nStart
|
||||||
|
Do While nCur <= nLen
|
||||||
|
If IsDelim(VBA.Mid$(sText, nCur, 1)) Then
|
||||||
|
If nCur > nStart And nCur - nStart >= params_.smallSize_ Then _
|
||||||
|
Call iWords.Add(VBA.Mid$(sText, nStart, nCur - nStart))
|
||||||
|
nStart = nCur + 1
|
||||||
|
End If
|
||||||
|
nCur = nCur + 1
|
||||||
|
Loop
|
||||||
|
|
||||||
|
If nCur > nStart And nCur - nStart >= params_.smallSize_ Then _
|
||||||
|
Call iWords.Add(VBA.Mid$(sText, nStart, nCur - nStart))
|
||||||
|
Set ExtractWords = iWords
|
||||||
|
End Function
|
||||||
|
|
||||||
|
Private Function ResetFoundIDs()
|
||||||
|
ReDim foundIDs_(1 To queryCount_)
|
||||||
|
Dim nItem&
|
||||||
|
For nItem = 1 To queryCount_ Step 1
|
||||||
|
Set foundIDs_(nItem) = New Collection
|
||||||
|
Next nItem
|
||||||
|
End Function
|
||||||
|
|
||||||
|
Private Function ResetWordCounts()
|
||||||
|
ReDim wordCounts_(1 To queryCount_)
|
||||||
|
End Function
|
||||||
|
|
||||||
|
Private Function CountNonEmpty(target As Excel.Range) As Long
|
||||||
|
Dim emptyIndex&: emptyIndex = XLFirstEmptyCell(target)
|
||||||
|
If emptyIndex = -1 Then
|
||||||
|
CountNonEmpty = target.Count
|
||||||
|
Else
|
||||||
|
CountNonEmpty = emptyIndex - 1
|
||||||
|
End If
|
||||||
|
End Function
|
||||||
|
|
||||||
|
Private Function ListIDs(nItem&) As String
|
||||||
|
ListIDs = ""
|
||||||
|
Dim vID As Variant
|
||||||
|
For Each vID In foundIDs_(nItem)
|
||||||
|
If ListIDs <> "" Then _
|
||||||
|
ListIDs = ListIDs & ", "
|
||||||
|
ListIDs = ListIDs & CStr(vID)
|
||||||
|
Next vID
|
||||||
|
End Function
|
||||||
|
|
||||||
|
Private Function OutputWords(nItem&)
|
||||||
|
Dim nColumn&: nColumn = S_SR_DATA
|
||||||
|
Dim vID As Variant
|
||||||
|
For Each vID In foundIDs_(nItem)
|
||||||
|
out_.Cells(nItem, nColumn) = params_.searchWhere_(CLng(vID))
|
||||||
|
nColumn = nColumn + 1
|
||||||
|
If nColumn >= MAX_COLUMNS Then _
|
||||||
|
Exit For
|
||||||
|
Next vID
|
||||||
|
End Function
|
||||||
|
|
||||||
|
Private Function IsDelim(sSymbol$) As Boolean
|
||||||
|
IsDelim = True
|
||||||
|
If sSymbol = Chr(13) Then
|
||||||
|
Exit Function
|
||||||
|
ElseIf sSymbol = Chr(10) Then
|
||||||
|
Exit Function
|
||||||
|
ElseIf sSymbol = "," Then
|
||||||
|
Exit Function
|
||||||
|
ElseIf sSymbol = ChrW(&H2013) Then _
|
||||||
|
Exit Function
|
||||||
|
ElseIf sSymbol = ChrW(&H2012) Then _
|
||||||
|
Exit Function
|
||||||
|
ElseIf sSymbol = ChrW(&H2010) Then _
|
||||||
|
Exit Function
|
||||||
|
ElseIf sSymbol = ";" Then
|
||||||
|
Exit Function
|
||||||
|
ElseIf sSymbol = " " Then
|
||||||
|
Exit Function
|
||||||
|
ElseIf sSymbol = "!" Then
|
||||||
|
Exit Function
|
||||||
|
ElseIf sSymbol = ":" Then
|
||||||
|
Exit Function
|
||||||
|
ElseIf sSymbol = "?" Then
|
||||||
|
Exit Function
|
||||||
|
ElseIf sSymbol = """" Then
|
||||||
|
Exit Function
|
||||||
|
ElseIf sSymbol = ")" Then
|
||||||
|
Exit Function
|
||||||
|
ElseIf sSymbol = "(" Then
|
||||||
|
Exit Function
|
||||||
|
ElseIf sSymbol = "Chr(85)" Then
|
||||||
|
Exit Function
|
||||||
|
End If
|
||||||
|
IsDelim = False
|
||||||
|
End Function
|
||||||
|
|
||||||
|
|
55
src/WordDlg.frm
Normal file
55
src/WordDlg.frm
Normal file
|
@ -0,0 +1,55 @@
|
||||||
|
VERSION 5.00
|
||||||
|
Begin {C62A69F0-16DC-11CE-9E98-00AA00574A4F} WordDlg
|
||||||
|
Caption = "Óïðàâëåíèå íàäñòðîéêàìè"
|
||||||
|
ClientHeight = 3300
|
||||||
|
ClientLeft = 120
|
||||||
|
ClientTop = 465
|
||||||
|
ClientWidth = 4770
|
||||||
|
OleObjectBlob = "WordDlg.frx":0000
|
||||||
|
StartUpPosition = 1 'CenterOwner
|
||||||
|
End
|
||||||
|
Attribute VB_Name = "WordDlg"
|
||||||
|
Attribute VB_GlobalNameSpace = False
|
||||||
|
Attribute VB_Creatable = False
|
||||||
|
Attribute VB_PredeclaredId = True
|
||||||
|
Attribute VB_Exposed = False
|
||||||
|
Option Explicit
|
||||||
|
|
||||||
|
Private bUpdate_ As Boolean
|
||||||
|
Public isCanceled_ As Boolean
|
||||||
|
|
||||||
|
Private Sub UserForm_Initialize()
|
||||||
|
isCanceled_ = True
|
||||||
|
Call PositionInMiddle(Me)
|
||||||
|
End Sub
|
||||||
|
|
||||||
|
Public Function Init(opts As AddinOptions)
|
||||||
|
isCanceled_ = True
|
||||||
|
CBConcept.Value = opts.data_.Item(T_WA_CONCEPT)
|
||||||
|
CBNpa.Value = opts.data_.Item(T_WA_NPA)
|
||||||
|
CBMarkup.Value = opts.data_.Item(T_WA_MARKUP)
|
||||||
|
CBParsers.Value = opts.data_.Item(T_WA_PARSERS)
|
||||||
|
CBMaket.Value = opts.data_.Item(T_WA_MAKET)
|
||||||
|
End Function
|
||||||
|
|
||||||
|
Public Function GetResult() As AddinOptions
|
||||||
|
Set GetResult = New AddinOptions
|
||||||
|
With GetResult
|
||||||
|
.data_.Item(T_WA_CONCEPT) = CBConcept.Value
|
||||||
|
.data_.Item(T_WA_NPA) = CBNpa.Value
|
||||||
|
.data_.Item(T_WA_MARKUP) = CBMarkup.Value
|
||||||
|
.data_.Item(T_WA_PARSERS) = CBParsers.Value
|
||||||
|
.data_.Item(T_WA_MAKET) = CBMaket.Value
|
||||||
|
End With
|
||||||
|
End Function
|
||||||
|
|
||||||
|
' =======
|
||||||
|
Private Sub BtnCancel_Click()
|
||||||
|
isCanceled_ = True
|
||||||
|
Call Me.Hide
|
||||||
|
End Sub
|
||||||
|
|
||||||
|
Private Sub BtnOK_Click()
|
||||||
|
isCanceled_ = False
|
||||||
|
Call Me.Hide
|
||||||
|
End Sub
|
BIN
src/WordDlg.frx
Normal file
BIN
src/WordDlg.frx
Normal file
Binary file not shown.
84
src/z_UIMessages.bas
Normal file
84
src/z_UIMessages.bas
Normal file
|
@ -0,0 +1,84 @@
|
||||||
|
Attribute VB_Name = "z_UIMessages"
|
||||||
|
' Messaging module
|
||||||
|
Option Private Module
|
||||||
|
Option Explicit
|
||||||
|
|
||||||
|
Public Enum MsgCode
|
||||||
|
EM_PROJECTS_EMPTY
|
||||||
|
EM_SELECTION_NO_HYPERLINKS
|
||||||
|
EM_SELECTION_EMPTY
|
||||||
|
EM_RELOCATE_DATA_FAIL
|
||||||
|
EM_WORD_IS_OPEN
|
||||||
|
EM_CORE_UPDATE_FAILED
|
||||||
|
EM_WORD_ADDINS_FAILED
|
||||||
|
EM_TEMPLATES_FAILED
|
||||||
|
EM_DIALOG_DATA_INVALID
|
||||||
|
|
||||||
|
IM_LINKS_VALIDATION
|
||||||
|
IM_LINKS_SERVER
|
||||||
|
IM_LINKS_SCAN_OK
|
||||||
|
IM_LINKS_RELOCATE_OK
|
||||||
|
IM_CONCEPT_UPDATE_OK
|
||||||
|
IM_WORD_ADDINS_OK
|
||||||
|
IM_TEMPLATES_OK
|
||||||
|
IM_LINKS_COPY_OK
|
||||||
|
IM_SEARCH_OK
|
||||||
|
End Enum
|
||||||
|
|
||||||
|
Private g_UI As API_UserInteraction
|
||||||
|
|
||||||
|
Public Function UserInteraction() As API_UserInteraction
|
||||||
|
If g_UI Is Nothing Then _
|
||||||
|
Set g_UI = New API_UserInteraction
|
||||||
|
Set UserInteraction = g_UI
|
||||||
|
End Function
|
||||||
|
|
||||||
|
Public Function SetUserInteraction(newUI As API_UserInteraction)
|
||||||
|
Set g_UI = newUI
|
||||||
|
End Function
|
||||||
|
|
||||||
|
Public Function UIShowMessage(theCode As MsgCode, ParamArray params() As Variant)
|
||||||
|
Dim unwrapped As Variant: unwrapped = params
|
||||||
|
unwrapped = FixForwardedParams(unwrapped)
|
||||||
|
|
||||||
|
Select Case theCode
|
||||||
|
Case EM_PROJECTS_EMPTY: Call MsgBox("Ñïèñîê ïðîåêòîâ ïóñò", vbExclamation)
|
||||||
|
Case EM_SELECTION_NO_HYPERLINKS: Call MsgBox("Â âûäåëåííîì äèàïàçîíå îòñóòñòâóþò ññûëêè", vbExclamation)
|
||||||
|
Case EM_SELECTION_EMPTY: Call MsgBox("Âûäåëåííàÿ îáëàñòü ïóñòà", vbExclamation)
|
||||||
|
Case EM_RELOCATE_DATA_FAIL: Call MsgBox("Óêàæèòå âàëèäíûé êàòàëîã íàçíà÷åíèÿ", vbExclamation)
|
||||||
|
Case EM_WORD_IS_OPEN: Call MsgBox("Çàêðîéòå Word ïåðåä èçìåíåíèåì íàäñòðîåê èëè øàáëîíîâ", vbExclamation)
|
||||||
|
Case EM_CORE_UPDATE_FAILED: Call MsgBox("Íå óäàëîñü óñòàíîâèòü ôàéëû ÊÎÍÖÅÏÒ ñ ñåðâåðà." & vbNewLine _
|
||||||
|
& "Ïðîâåðüòå VPN, ñåòåâûå ïóòè (\\fs1.concept.ru)" & vbNewLine _
|
||||||
|
& "Ïîïðîáóéòå ïåðåçàãðóçèòü Excel äëÿ âûãðóçêè dll", vbExclamation)
|
||||||
|
Case EM_WORD_ADDINS_FAILED: Call MsgBox("Íå óäàëîñü îáíîâèòü íàäñòðîéêè. Ïðîâåðüòå ïîäêëþ÷åíèå ê \\fs1.concept.ru", vbExclamation)
|
||||||
|
Case EM_TEMPLATES_FAILED: Call MsgBox("Íå óäàëîñü îáíîâèòü øàáëîíû", vbExclamation)
|
||||||
|
Case EM_DIALOG_DATA_INVALID: Call MsgBox("Çàïîëíèòå âñå ïîëÿ ôîðìû", vbExclamation)
|
||||||
|
|
||||||
|
Case IM_LINKS_VALIDATION: Call MsgBox(Fmt("Êîëè÷åñòâî íåêîððåêòíûõ ññûëîê íà ôàéëû: {1}/{2}", unwrapped), vbInformation)
|
||||||
|
Case IM_LINKS_SCAN_OK: Call MsgBox(Fmt("Äîáàâëåíî ôàéëîâ: {1}/{2}", unwrapped), vbInformation)
|
||||||
|
Case IM_LINKS_RELOCATE_OK: Call MsgBox(Fmt("Ïåðåìåùåíî ôàéëîâ: {1}/{2}", unwrapped), vbInformation)
|
||||||
|
Case IM_LINKS_SERVER: Call MsgBox(Fmt("Èñïðàâëåíî ãèïåðññûëîê: {1}/{2}", unwrapped), vbInformation)
|
||||||
|
Case IM_CONCEPT_UPDATE_OK: Call MsgBox("Îôèñíûå ïðîäóêòû ÊÎÍÖÅÏÒ îáíîâëåíû óñïåøíî", vbInformation)
|
||||||
|
Case IM_WORD_ADDINS_OK: Call MsgBox("Îáíîâëåíèå íàäñòðîåê çàâåðøåíî", vbInformation)
|
||||||
|
Case IM_TEMPLATES_OK: Call MsgBox("Îáíîâëåíèå øàáëîíîâ çàâåðøåíî", vbInformation)
|
||||||
|
Case IM_LINKS_COPY_OK: Call MsgBox(Fmt("Ñêîïèðîâàíî ôàéëîâ: {1}/{2}", unwrapped), vbInformation)
|
||||||
|
Case IM_SEARCH_OK: Call MsgBox("Ïîèñê çàâåðøåí", vbInformation)
|
||||||
|
|
||||||
|
Case Else: Call MsgBox("Íåâåðíûé êîä ñîîáùåíèÿ", vbCritical)
|
||||||
|
End Select
|
||||||
|
End Function
|
||||||
|
|
||||||
|
Public Function UIAskQuestion(theCode As MsgCode, ParamArray params() As Variant) As Boolean
|
||||||
|
Dim unwrapped As Variant: unwrapped = params
|
||||||
|
unwrapped = FixForwardedParams(unwrapped)
|
||||||
|
|
||||||
|
Dim answer&: answer = vbNo
|
||||||
|
Select Case theCode
|
||||||
|
'Case QM_CODE_DELETE_CONFIRM
|
||||||
|
' answer = MsgBox("Are you sure you want to delete ALL macros from target file?", vbYesNo + vbQuestion)
|
||||||
|
|
||||||
|
Case Else
|
||||||
|
Call MsgBox("Íåâåðíûé êîä ñîîáùåíèÿ", vbCritical)
|
||||||
|
End Select
|
||||||
|
UIAskQuestion = answer = vbYes
|
||||||
|
End Function
|
42
src/z_UIRibbon.bas
Normal file
42
src/z_UIRibbon.bas
Normal file
|
@ -0,0 +1,42 @@
|
||||||
|
Attribute VB_Name = "z_UIRibbon"
|
||||||
|
Option Explicit
|
||||||
|
Option Private Module
|
||||||
|
|
||||||
|
Public Sub CC_OnRibbonBtn(iControl As IRibbonControl)
|
||||||
|
Select Case iControl.ID
|
||||||
|
Case "CCGroupByRank": Call CC_RunGroupByRank
|
||||||
|
Case "CCGroupByID": Call CC_RunGroupByID
|
||||||
|
|
||||||
|
Case "CCTrimCells": Call CC_RunTrimCells
|
||||||
|
Case "CCTrimPunctuation": Call CC_RunTrimPunctuation
|
||||||
|
Case "CCSubstituteWhitespace": Call CC_RunSubstituteWhitespace
|
||||||
|
Case "CCSplitText": Call CC_RunSplitText
|
||||||
|
Case "CCClearFormatting": Call CC_RunClearFormatting
|
||||||
|
|
||||||
|
Case "CCAnalyseSearch": Call CC_RunAnalyseSearch
|
||||||
|
|
||||||
|
Case "CCLinksCreate": Call CC_RunLinksCreate
|
||||||
|
Case "CCLinksScan": Call CC_RunLinksScan
|
||||||
|
Case "CCLinksValidate": Call CC_RunLinksValidate
|
||||||
|
Case "CCLinksCopyFiles": Call CC_RunLinksCopyFiles
|
||||||
|
Case "CCLinksRelocate": Call CC_RunLinksRelocate
|
||||||
|
Case "CCLinksServer": Call CC_RunLinksServer
|
||||||
|
Case "CCLinksPrint": Call CC_RunLinksPrint
|
||||||
|
|
||||||
|
Case "CCListIncome": Call CC_RunListIncome
|
||||||
|
Case "CCListOutcome": Call CC_RunListOutcome
|
||||||
|
Case "CCListLeads": Call CC_RunListLeads
|
||||||
|
Case "CCListTentative": Call CC_RunListTentative
|
||||||
|
|
||||||
|
Case "CCConceptStatus": Call CC_RunConceptStatus
|
||||||
|
Case "CCUpdateConcept": Call CC_RunUpdateConceptCore
|
||||||
|
Case "CCConfig": Call CC_RunConfig
|
||||||
|
Case "CCWordAddin": Call CC_RunWordAddin
|
||||||
|
Case "CCUpdateTemplates": Call CC_RunUpdateTemplates
|
||||||
|
Case "CCAppdata": Call CC_RunAppdata
|
||||||
|
Case "CCDescriptionUDF": Call CC_RunDescriptionUDF
|
||||||
|
|
||||||
|
Case "CCxlHelp": Call CC_RunHelp
|
||||||
|
End Select
|
||||||
|
End Sub
|
||||||
|
|
2
ui/.rels
Normal file
2
ui/.rels
Normal file
|
@ -0,0 +1,2 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
||||||
|
<Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships"><Relationship Id="rId1" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument" Target="xl/workbook.xml"/><Relationship Id="rId6" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/extended-properties" Target="docProps/app.xml"/><Relationship Id="rId5" Type="http://schemas.openxmlformats.org/package/2006/relationships/metadata/core-properties" Target="docProps/core.xml"/><Relationship Id="rId4" Type="http://schemas.microsoft.com/office/2006/relationships/ui/extensibility" Target="customUI/customUI.xml"/></Relationships>
|
140
ui/customUI.xml
Normal file
140
ui/customUI.xml
Normal file
|
@ -0,0 +1,140 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui"
|
||||||
|
xmlns:CC="Concept Namespace">
|
||||||
|
<ribbon startFromScratch="false" >
|
||||||
|
<tabs>
|
||||||
|
<tab idQ="CC:CustomBtns" label="КОНЦЕПТ" >
|
||||||
|
<group id="Group1" label="Основные функции" >
|
||||||
|
|
||||||
|
<menu id="GroupByMenu" label="Group" imageMso="AddAccount" size="large">
|
||||||
|
<button id="CCGroupByRank" label="по уровню"
|
||||||
|
supertip="Группировать строки по номерам уровней в выделенном диапазоне"
|
||||||
|
imageMso="GroupLevel"
|
||||||
|
onAction="CC_OnRibbonBtn"/>
|
||||||
|
<button id="CCGroupByID" label="по идентификатору"
|
||||||
|
supertip="Группировать строки по совпадающим идентификаторам в выделенном диапазоне"
|
||||||
|
imageMso="IdentityEdit"
|
||||||
|
onAction="CC_OnRibbonBtn"/>
|
||||||
|
</menu>
|
||||||
|
|
||||||
|
<menu id="EditMenu" label="Edit" imageMso="EditDocument" size="large">
|
||||||
|
<button id="CCTrimCells" label="Удалить пробелы и переносы в начале и конце"
|
||||||
|
supertip="Удалить пробелы и переносы строк в начале и конце текста"
|
||||||
|
imageMso="RulesConditionIsBlankGallery"
|
||||||
|
onAction="CC_OnRibbonBtn"/>
|
||||||
|
<button id="CCTrimPunctuation" label="Удалить знаки в конце"
|
||||||
|
supertip="Удалить знаки препинания в конце текста"
|
||||||
|
imageMso="EndOfDocument"
|
||||||
|
onAction="CC_OnRibbonBtn"/>
|
||||||
|
<button id="CCSubstituteWhitespace" label="Заменить табуляторы и переносы"
|
||||||
|
supertip="Заменить все специальные знаки пробелами"
|
||||||
|
imageMso="FontsReplaceFonts"
|
||||||
|
onAction="CC_OnRibbonBtn"/>
|
||||||
|
<button id="CCSplitText" label="Разделить на слова"
|
||||||
|
supertip="Представить текст ячейки как столбец слов под ней"
|
||||||
|
imageMso="SplitVertically"
|
||||||
|
onAction="CC_OnRibbonBtn"/>
|
||||||
|
<button id="CCClearFormatting" label="Удалить форматирование"
|
||||||
|
supertip="Удалить условное форматирование в заданном диапазоне"
|
||||||
|
imageMso="ConditionalFormattingClearMenu"
|
||||||
|
onAction="CC_OnRibbonBtn"/>
|
||||||
|
</menu>
|
||||||
|
|
||||||
|
<menu id="LinksMenu" label="Links" imageMso="DataTypeHyperlink" size="large">
|
||||||
|
<button id="CCLinksCreate" label="Гиперссылки из текста"
|
||||||
|
supertip="Создать гиперссылки из текста ячеек"
|
||||||
|
imageMso="AutoSigWebInsertHyperlink"
|
||||||
|
onAction="CC_OnRibbonBtn"/>
|
||||||
|
<button id="CCLinksScan" label="Сканировать каталог"
|
||||||
|
supertip="Вставить в выбранную ячейку список всех файлов в каталоге с гиперссылками"
|
||||||
|
imageMso="NewSharedFolderWorkspace"
|
||||||
|
onAction="CC_OnRibbonBtn"/>
|
||||||
|
<button id="CCLinksValidate" label="Проверить ссылки"
|
||||||
|
supertip="Проверить наличие файлов по ссылкам в выделенных ячейках"
|
||||||
|
imageMso="HyperlinksVerify"
|
||||||
|
onAction="CC_OnRibbonBtn"/>
|
||||||
|
<button id="CCLinksServer" label="Диски X: и P:"
|
||||||
|
supertip="Исправить сетевые пути на \\strg1 и \\server"
|
||||||
|
imageMso="ServerRestoreSqlDatabase"
|
||||||
|
onAction="CC_OnRibbonBtn"/>
|
||||||
|
<button id="CCLinksCopyFiles" label="Копировать файлы"
|
||||||
|
supertip="Копировать файлы по ссылкам в выбранных ячейках с обновлением гиперссылок"
|
||||||
|
imageMso="CopyToFolder"
|
||||||
|
onAction="CC_OnRibbonBtn"/>
|
||||||
|
<button id="CCLinksRelocate" label="Переместить файлы"
|
||||||
|
supertip="Переместить файлы по ссылкам в выбранных ячейках с обновлением гиперссылок"
|
||||||
|
imageMso="GroupMoveActions"
|
||||||
|
onAction="CC_OnRibbonBtn"/>
|
||||||
|
<button id="CCLinksPrint" label="Печать по ссылкам"
|
||||||
|
supertip="Печать файлов по ссылкам в выделенном диапазоне"
|
||||||
|
imageMso="FileInternetFax"
|
||||||
|
onAction="CC_OnRibbonBtn"/>
|
||||||
|
</menu>
|
||||||
|
|
||||||
|
<menu id="AnalyseMenu" label="Анализ" imageMso="RulesManager" size="large">
|
||||||
|
<button id="CCAnalyseSearch" label="Пословный поиск"
|
||||||
|
supertip="Поиск всех вхождений набора словосочетаний в другом наборе словосочетаний"
|
||||||
|
imageMso="GroupSearch"
|
||||||
|
onAction="CC_OnRibbonBtn"/>
|
||||||
|
</menu>
|
||||||
|
|
||||||
|
<menu id="ProjectsMenu" label="Проекты" imageMso="AlignJustifyWithMixedLanguages" size="large">
|
||||||
|
<button id="CCListIncome" label="Income проекты"
|
||||||
|
supertip="Вставить список Income проектов"
|
||||||
|
imageMso="DollarSign"
|
||||||
|
onAction="CC_OnRibbonBtn"/>
|
||||||
|
<button id="CCListOutcome" label="Outcome проекты"
|
||||||
|
supertip="Вставить список Income проектов"
|
||||||
|
imageMso="GroupOutliningTools"
|
||||||
|
onAction="CC_OnRibbonBtn"/>
|
||||||
|
<button id="CCListLeads" label="Переговоры активные"
|
||||||
|
supertip="Вставить список активных переговоров"
|
||||||
|
imageMso="ConversationGroupMessageOption"
|
||||||
|
onAction="CC_OnRibbonBtn"/>
|
||||||
|
<button id="CCListTentative" label="Переговоры возможные"
|
||||||
|
supertip="Вставить список возможных переговоров"
|
||||||
|
imageMso="CellAlignmentOptions"
|
||||||
|
onAction="CC_OnRibbonBtn"/>
|
||||||
|
</menu>
|
||||||
|
|
||||||
|
<menu id="TechListMenu" label="Технологии" imageMso="AdministrationHome" size="large">
|
||||||
|
<button id="CCConceptStatus" label="Перечень продуктов"
|
||||||
|
supertip="Отображение перечня установленных продуктов и их статусов"
|
||||||
|
imageMso="BlogHomePage"
|
||||||
|
onAction="CC_OnRibbonBtn"/>
|
||||||
|
<button id="CCUpdateConcept" label="Обновить CONCEPT"
|
||||||
|
supertip="Обновление всех технологий, входящих в состав офисных продуктов КОНЦЕПТ, включая шаблоны документов"
|
||||||
|
imageMso="DesignerRibbonGiveFeedback"
|
||||||
|
onAction="CC_OnRibbonBtn"/>
|
||||||
|
<button id="CCWordAddin" label="Word Add-Ins"
|
||||||
|
supertip="Управление надстройками Word"
|
||||||
|
imageMso="MindMapExportWord"
|
||||||
|
onAction="CC_OnRibbonBtn"/>
|
||||||
|
<button id="CCUpdateTemplates" label="Обновить шаблоны"
|
||||||
|
supertip="Обновление шаблонов с сервера"
|
||||||
|
imageMso="QuickStepTemplateMoveToFolder"
|
||||||
|
onAction="CC_OnRibbonBtn"/>
|
||||||
|
<button id="CCConfig" label="Настройки"
|
||||||
|
supertip="Открыть JSON файл настроек технологий"
|
||||||
|
imageMso="AnimationCustomAddActionVerbDialog"
|
||||||
|
onAction="CC_OnRibbonBtn"/>
|
||||||
|
<button id="CCAppdata" label="Открыть APPDATA"
|
||||||
|
supertip="Открыть папку %APPDATA%\Microsoft"
|
||||||
|
imageMso="DesignerOpen"
|
||||||
|
onAction="CC_OnRibbonBtn"/>
|
||||||
|
<button id="CCDescriptionUDF" label="Описания функций ячеек"
|
||||||
|
supertip="Обновить описания специальных функций в ячейках"
|
||||||
|
imageMso="InsertBuildingBlocksEquationsGallery"
|
||||||
|
onAction="CC_OnRibbonBtn"/>
|
||||||
|
</menu>
|
||||||
|
|
||||||
|
<button id="CCxlHelp" visible="true" size="large"
|
||||||
|
label="Справка"
|
||||||
|
supertip="Вызов справки по надстройкам Excel"
|
||||||
|
imageMso="Info"
|
||||||
|
onAction="CC_OnRibbonBtn"/>
|
||||||
|
</group>
|
||||||
|
</tab>
|
||||||
|
</tabs>
|
||||||
|
</ribbon>
|
||||||
|
</customUI>
|
Loading…
Reference in New Issue
Block a user