summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJens-Heiner Rechtien <hr@openoffice.org>2009-11-30 15:12:49 +0000
committerJens-Heiner Rechtien <hr@openoffice.org>2009-11-30 15:12:49 +0000
commit9c2711a44a51a2c8c1ad20f66e1d7cf97bb1f2d5 (patch)
tree2cd96d9d53dc0b40dc8230615861526b3c65a4cd
parentd44e3116c4d43664c0b8c9978696d3f26558e724 (diff)
parentc99c1c46f5201bd7866588c76e1cd41f5d0dda5b (diff)
slideshow1: merge with DEV300 m49
-rw-r--r--apache-commons/download/README16
-rw-r--r--apache-commons/download/commons-httpclient-3.1-src.tar.gzbin2403054 -> 1882664 bytes
-rw-r--r--apache-commons/download/commons-lang-2.3-src.tar.gzbin481275 -> 474681 bytes
-rw-r--r--apache-commons/java/httpclient/makefile.mk2
-rw-r--r--apache-commons/java/lang/makefile.mk2
-rw-r--r--migrationanalysis/Read Me.odtbin0 -> 15137 bytes
-rw-r--r--migrationanalysis/prj/build.lst7
-rw-r--r--migrationanalysis/prj/d.lst3
-rw-r--r--migrationanalysis/src/driver_docs/CreateDriverDocs.wsf224
-rw-r--r--migrationanalysis/src/driver_docs/DocAnalysisRunMacro.vbs441
-rw-r--r--migrationanalysis/src/driver_docs/PAW/_OOoDocAnalysisExcelDriver.xlsbin0 -> 696832 bytes
-rw-r--r--migrationanalysis/src/driver_docs/PAW/_OOoDocAnalysisPPTDriver.pptbin0 -> 284672 bytes
-rw-r--r--migrationanalysis/src/driver_docs/PAW/_OOoDocAnalysisWordDriver.docbin0 -> 664064 bytes
-rw-r--r--migrationanalysis/src/driver_docs/allstrings.ulf2371
-rw-r--r--migrationanalysis/src/driver_docs/makefile.mk131
-rw-r--r--migrationanalysis/src/driver_docs/sources/AnalysisDriver.bas3648
-rw-r--r--migrationanalysis/src/driver_docs/sources/CollectedFiles.cls380
-rw-r--r--migrationanalysis/src/driver_docs/sources/CommonMigrationAnalyser.bas1121
-rw-r--r--migrationanalysis/src/driver_docs/sources/CommonPreparation.bas228
-rw-r--r--migrationanalysis/src/driver_docs/sources/DocumentAnalysis.cls344
-rw-r--r--migrationanalysis/src/driver_docs/sources/FileTypeAssociation.cls58
-rw-r--r--migrationanalysis/src/driver_docs/sources/IssueInfo.cls208
-rw-r--r--migrationanalysis/src/driver_docs/sources/LocalizeResults.bas308
-rw-r--r--migrationanalysis/src/driver_docs/sources/PrepareInfo.cls44
-rw-r--r--migrationanalysis/src/driver_docs/sources/StringDataManager.cls133
-rw-r--r--migrationanalysis/src/driver_docs/sources/Stripped_OOoDocAnalysisExcelDriver.xlsbin0 -> 31232 bytes
-rw-r--r--migrationanalysis/src/driver_docs/sources/Stripped_OOoDocAnalysisPPTDriver.pptbin0 -> 64512 bytes
-rw-r--r--migrationanalysis/src/driver_docs/sources/Stripped_OOoDocAnalysisWordDriver.docbin0 -> 38912 bytes
-rw-r--r--migrationanalysis/src/driver_docs/sources/common_res.bas286
-rw-r--r--migrationanalysis/src/driver_docs/sources/excel/ApplicationSpecific.bas166
-rw-r--r--migrationanalysis/src/driver_docs/sources/excel/MigrationAnalyser.cls2321
-rw-r--r--migrationanalysis/src/driver_docs/sources/excel/Preparation.bas53
-rw-r--r--migrationanalysis/src/driver_docs/sources/excel/SetTextBoxFont.bas52
-rw-r--r--migrationanalysis/src/driver_docs/sources/excel/ThisWorkbook.cls55
-rw-r--r--migrationanalysis/src/driver_docs/sources/excel/excel_res.bas377
-rw-r--r--migrationanalysis/src/driver_docs/sources/powerpoint/ApplicationSpecific.bas178
-rw-r--r--migrationanalysis/src/driver_docs/sources/powerpoint/Loader.bas64
-rw-r--r--migrationanalysis/src/driver_docs/sources/powerpoint/MigrationAnalyser.cls826
-rw-r--r--migrationanalysis/src/driver_docs/sources/powerpoint/Preparation.bas43
-rw-r--r--migrationanalysis/src/driver_docs/sources/powerpoint/Slide1.cls56
-rw-r--r--migrationanalysis/src/driver_docs/sources/powerpoint/powerpoint_res.bas109
-rw-r--r--migrationanalysis/src/driver_docs/sources/results_res.bas613
-rw-r--r--migrationanalysis/src/driver_docs/sources/word/ApplicationSpecific.bas158
-rw-r--r--migrationanalysis/src/driver_docs/sources/word/MigrationAnalyser.cls1524
-rw-r--r--migrationanalysis/src/driver_docs/sources/word/Preparation.bas153
-rw-r--r--migrationanalysis/src/driver_docs/sources/word/ThisDocument.cls54
-rw-r--r--migrationanalysis/src/driver_docs/sources/word/word_res.bas291
-rw-r--r--migrationanalysis/src/driver_docs/ulf2dat.pl156
-rw-r--r--migrationanalysis/src/exe/LaunchDrivers.exebin0 -> 28672 bytes
-rw-r--r--migrationanalysis/src/exe/ProAnalysisWizard.exebin0 -> 843776 bytes
-rw-r--r--migrationanalysis/src/msokill/StdAfx.cpp37
-rw-r--r--migrationanalysis/src/msokill/StdAfx.h56
-rw-r--r--migrationanalysis/src/msokill/makefile.mk85
-rw-r--r--migrationanalysis/src/msokill/msokill.cpp261
-rw-r--r--migrationanalysis/src/resources/analysis.dtd52
-rw-r--r--migrationanalysis/src/resources/makefile.mk61
-rw-r--r--migrationanalysis/src/resources/results_paw.xltbin0 -> 140800 bytes
-rw-r--r--migrationanalysis/src/wizard/Analyse.bas592
-rw-r--r--migrationanalysis/src/wizard/CollectedFiles.cls533
-rw-r--r--migrationanalysis/src/wizard/DocAnalysisWizard.exe.manifest22
-rw-r--r--migrationanalysis/src/wizard/Get Directory Dialog.bas146
-rw-r--r--migrationanalysis/src/wizard/IniSupport.bas272
-rw-r--r--migrationanalysis/src/wizard/LaunchDrivers.vbp42
-rw-r--r--migrationanalysis/src/wizard/LaunchDrivers.vbw1
-rw-r--r--migrationanalysis/src/wizard/OOo3_Analysis.icobin0 -> 295606 bytes
-rw-r--r--migrationanalysis/src/wizard/OOo_AnalysisBitmap.pngbin0 -> 8625 bytes
-rw-r--r--migrationanalysis/src/wizard/Office10Issues.bas364
-rw-r--r--migrationanalysis/src/wizard/ProAnalysisWizard.vbp65
-rw-r--r--migrationanalysis/src/wizard/RunServer.bas202
-rw-r--r--migrationanalysis/src/wizard/ScanFolders.frm157
-rw-r--r--migrationanalysis/src/wizard/SearchDocs.frm124
-rw-r--r--migrationanalysis/src/wizard/Terminate.frm81
-rw-r--r--migrationanalysis/src/wizard/Utilities.bas555
-rw-r--r--migrationanalysis/src/wizard/Wizard.DCAbin0 -> 3927 bytes
-rw-r--r--migrationanalysis/src/wizard/Wizard.Dsr79
-rw-r--r--migrationanalysis/src/wizard/Wizard.FRXbin0 -> 416643 bytes
-rw-r--r--migrationanalysis/src/wizard/Wizard.bas654
-rw-r--r--migrationanalysis/src/wizard/Wizard.frm3458
-rw-r--r--migrationanalysis/src/wizard/makefile.mk118
-rw-r--r--migrationanalysis/src/wizard/rcfooter.txt1
-rw-r--r--migrationanalysis/src/wizard/rcheader.txt17
-rw-r--r--migrationanalysis/src/wizard/rctmpl.txt126
-rw-r--r--migrationanalysis/src/wizard/res_defines.h150
-rw-r--r--migrationanalysis/src/wizard/wizard.ulf352
-rw-r--r--migrationanalysis/util/delzip1
-rw-r--r--migrationanalysis/util/makefile.mk84
-rw-r--r--reportbuilder/java/com/sun/star/report/pentaho/SOFormulaParser.java2
-rw-r--r--reportbuilder/registry/data/org/openoffice/Office/ExtendedColorScheme.xcu405
-rw-r--r--reportbuilder/registry/data/org/openoffice/Office/UI/DbReportWindowState.xcu306
-rw-r--r--reportbuilder/registry/data/org/openoffice/Office/UI/ReportCommands.xcu742
-rw-r--r--sdext/source/minimizer/fileopendialog.cxx54
-rw-r--r--sdext/source/pdfimport/filterdet.cxx3
-rw-r--r--sdext/source/pdfimport/tree/pdfiprocessor.cxx5
-rw-r--r--sdext/source/pdfimport/tree/pdfiprocessor.hxx1
-rwxr-xr-xsdext/source/pdfimport/wrapper/wrapper.cxx6
-rw-r--r--swext/mediawiki/build.xml17
-rw-r--r--swext/mediawiki/src/com/sun/star/wiki/EditPageParser.java86
-rw-r--r--swext/mediawiki/src/com/sun/star/wiki/Helper.java73
-rw-r--r--swext/mediawiki/src/com/sun/star/wiki/WikiEditSettingDialog.java6
-rw-r--r--swext/mediawiki/src/com/sun/star/wiki/WikiEditorImpl.java4
-rw-r--r--swext/mediawiki/src/description.xml4
-rw-r--r--swext/mediawiki/src/registry/data/org/openoffice/Office/Custom/WikiExtension.xcu6
-rw-r--r--swext/mediawiki/src/registry/data/org/openoffice/Office/Paths.xcu36
-rw-r--r--swext/mediawiki/src/registry/data/org/openoffice/Office/makefile.mk2
-rw-r--r--swext/mediawiki/src/registry/data/org/openoffice/TypeDetection/Filter.xcu56
-rw-r--r--swext/mediawiki/src/registry/data/org/openoffice/TypeDetection/Types.xcu44
-rw-r--r--swext/mediawiki/src/registry/data/org/openoffice/TypeDetection/makefile.mk50
-rw-r--r--swext/mediawiki/src/registry/schema/org/openoffice/Office/Custom/WikiExtension.xcs3
-rw-r--r--swext/mediawiki/src/uno-extension-manifest.xml6
-rw-r--r--swext/prj/build.lst5
-rw-r--r--xpdf/makefile.mk4
-rw-r--r--xpdf/xpdf-3.02.patch986
112 files changed, 28064 insertions, 800 deletions
diff --git a/apache-commons/download/README b/apache-commons/download/README
new file mode 100644
index 000000000000..38fc135536d7
--- /dev/null
+++ b/apache-commons/download/README
@@ -0,0 +1,16 @@
+commons-codec-1.3-src.tar.gz
+commons-logging-1.1.1-src.tar.gz
+commons-lang-2.3-src.tar.gz
+
+downloaded from
+
+http://archive.apache.org/dist/commons
+
+---
+
+commons-httpclient-3.1-src.tar.gz
+
+downloaded from
+
+http://hc.apache.org/downloads.cgi
+
diff --git a/apache-commons/download/commons-httpclient-3.1-src.tar.gz b/apache-commons/download/commons-httpclient-3.1-src.tar.gz
index 9fe4c44a52f3..f52b40704b2f 100644
--- a/apache-commons/download/commons-httpclient-3.1-src.tar.gz
+++ b/apache-commons/download/commons-httpclient-3.1-src.tar.gz
Binary files differ
diff --git a/apache-commons/download/commons-lang-2.3-src.tar.gz b/apache-commons/download/commons-lang-2.3-src.tar.gz
index 7bd5a8ffe87b..f517cbd8ab4f 100644
--- a/apache-commons/download/commons-lang-2.3-src.tar.gz
+++ b/apache-commons/download/commons-lang-2.3-src.tar.gz
Binary files differ
diff --git a/apache-commons/java/httpclient/makefile.mk b/apache-commons/java/httpclient/makefile.mk
index 7070a07d5a6a..aab3eb5e36d6 100644
--- a/apache-commons/java/httpclient/makefile.mk
+++ b/apache-commons/java/httpclient/makefile.mk
@@ -43,6 +43,8 @@ ANT_BUILDFILE=build.xml
.INCLUDE : antsettings.mk
+TAR!:=$(GNUTAR)
+
.IF "$(SOLAR_JAVA)" != "" && "$(ENABLE_MEDIAWIKI)" == "YES"
# --- Files --------------------------------------------------------
diff --git a/apache-commons/java/lang/makefile.mk b/apache-commons/java/lang/makefile.mk
index 5db479dbd58c..4f957c610a8a 100644
--- a/apache-commons/java/lang/makefile.mk
+++ b/apache-commons/java/lang/makefile.mk
@@ -43,6 +43,8 @@ ANT_BUILDFILE=build.xml
.INCLUDE : antsettings.mk
+TAR!:=$(GNUTAR)
+
.IF "$(SOLAR_JAVA)" != "" && "$(ENABLE_MEDIAWIKI)" == "YES"
# --- Files --------------------------------------------------------
diff --git a/migrationanalysis/Read Me.odt b/migrationanalysis/Read Me.odt
new file mode 100644
index 000000000000..02c8db4b5eaa
--- /dev/null
+++ b/migrationanalysis/Read Me.odt
Binary files differ
diff --git a/migrationanalysis/prj/build.lst b/migrationanalysis/prj/build.lst
new file mode 100644
index 000000000000..19b8893dae10
--- /dev/null
+++ b/migrationanalysis/prj/build.lst
@@ -0,0 +1,7 @@
+at migrationanalysis : soltools NULL
+at migrationanalysis\src\msokill nmake - w at_src NULL
+at migrationanalysis\src\driver_docs nmake - w at_src_driver NULL
+at migrationanalysis\src\resources nmake - w at_src_resources NULL
+at migrationanalysis\src\wizard nmake - w at_src_wizard NULL
+at migrationanalysis\util nmake - w at_util at_src.w at_src_driver.w at_src_resources.w at_src_wizard.w NULL
+
diff --git a/migrationanalysis/prj/d.lst b/migrationanalysis/prj/d.lst
new file mode 100644
index 000000000000..9d07d2e618fa
--- /dev/null
+++ b/migrationanalysis/prj/d.lst
@@ -0,0 +1,3 @@
+..\%__SRC%\bin\ProAnalysisWizard\ProAnalysisWizard.exe %_DEST%\bin%_EXT%\ProAnalysisWizard.exe
+..\%__SRC%\bin\ProAnalysisWizard.zip %_DEST%\bin%_EXT%\ProAnalysisWizard.zip
+
diff --git a/migrationanalysis/src/driver_docs/CreateDriverDocs.wsf b/migrationanalysis/src/driver_docs/CreateDriverDocs.wsf
new file mode 100644
index 000000000000..8fc82d96d53a
--- /dev/null
+++ b/migrationanalysis/src/driver_docs/CreateDriverDocs.wsf
@@ -0,0 +1,224 @@
+'/*************************************************************************
+' *
+' * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+' *
+' * Copyright 2008 by Sun Microsystems, Inc.
+' *
+' * OpenOffice.org - a multi-platform office productivity suite
+' *
+' * $RCSfile: CreateDriverDocs.wsf,v $
+' * $Revision: 1.2.140.3 $
+' *
+' * This file is part of OpenOffice.org.
+' *
+' * OpenOffice.org is free software: you can redistribute it and/or modify
+' * it under the terms of the GNU Lesser General Public License version 3
+' * only, as published by the Free Software Foundation.
+' *
+' * OpenOffice.org is distributed in the hope that it will be useful,
+' * but WITHOUT ANY WARRANTY; without even the implied warranty of
+' * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+' * GNU Lesser General Public License version 3 for more details
+' * (a copy is included in the LICENSE file that accompanied this code).
+' *
+' * You should have received a copy of the GNU Lesser General Public License
+' * version 3 along with OpenOffice.org. If not, see
+' * http://www.openoffice.org/license.html
+' * for a copy of the LGPLv3 License.
+' *
+' ************************************************************************/
+'### Build Support Module for running commands to export and import
+'### modules from Word, Excel and PowerPoint Document Analysis driver documents
+
+
+<job id="DocAnalysisBuildCmd" error="true" debug="true">
+ <script language="VBScript" src="DocAnalysisRunMacro.vbs"/>
+ <script language="VBScript">
+
+Const CTITLE = "Document Analysis Command"
+
+Const CWORD_DRIVER = "_OOoDocAnalysisWordDriver.doc"
+Const CEXCEL_DRIVER = "_OOoDocAnalysisExcelDriver.xls"
+Const CPP_DRIVER = "_OOoDocAnalysisPPTDriver.ppt"
+Const CStub = "Stripped"
+
+Const CUTIL_APPNAME_WORD = "Word"
+Const CUTIL_APPNAME_EXCEL = "Excel"
+Const CUTIL_APPNAME_POWERPOINT = "Powerpoint"
+
+Const CDIAG_STD_DELAY = 2
+
+Const CDEFAULT_SOURCE_DIR = ".\sources\"
+Const CDEFAULT_TARGET_DIR = "."
+
+Const CSOURCE_DIR_ARG = "X"
+Const CTARGET_DIR_ARG = "T"
+Const CUSAGE_ARG = "?"
+
+Const CSTR_PAW = "\PAW\"
+
+'######### Doc Analysis Build - Main Script Body #############
+Dim mArgsNamed, mArgsUnnamed
+Dim mSourceDir
+Dim mTargetDir
+
+On Error Resume Next
+
+'### Process Arguments ###
+Set mArgsNamed = WScript.Arguments.Named
+Set mArgsUnnamed = WScript.Arguments.Unnamed
+
+If mArgsNamed.Exists(CUSAGE_ARG) Then
+ Usage
+ FinalExit
+End If
+
+'# Source Dir
+if mArgsNamed.Exists(CSOURCE_DIR_ARG) Then
+ mSourceDir = mArgsNamed.Item(CSOURCE_DIR_ARG)
+Else
+ mSourceDir = CDEFAULT_SOURCE_DIR
+End If
+
+'# Target Dir
+if mArgsNamed.Exists(CTARGET_DIR_ARG ) Then
+ mTargetDir = mArgsNamed.Item(CTARGET_DIR_ARG )
+Else
+ mTargetDir = CDEFAULT_TARGET_DIR
+End If
+
+mSourceDir = daFso.GetAbsolutePathName(mSourceDir )
+mTargetDir = daFso.GetAbsolutePathName(mTargetDir )
+
+'# Check source and target dirs exist
+If Not daFso.FolderExists(mSourceDir) Then
+ DAErrMsg "Source directory does not exist: " & mSourceDir, CDA_ERR_STD_DELAY
+ FinalExit
+End If
+If Not daFso.FolderExists(mTargetDir) Then
+ DAErrMsg "Target directory does not exist: " & mTargetDir, CDA_ERR_STD_DELAY
+ FinalExit
+End If
+
+Set mArgsNamed = Nothing
+Set mArgsUnnamed = Nothing
+
+'#### then continue with PAW
+ImportAll mTargetDir & CSTR_PAW
+
+'# Cleanup
+FinalExit
+
+
+'######### End - Main Script Body #############
+
+
+'#### Doc Analysis Build - Support Functions ####
+
+Sub Usage()
+ DAdiagMsg "Build command line tool to create Document Analysis driver documents" & vbLf & vbLf &_
+ "DocAnalysisBuildCmd [/X:<sourceDir>] [/T:<targetDir>]" & vbLf & vbLf &_
+ "/X:<sourceDir> base <source> directory " & vbLf & _
+ " The <sourceDir> is the base dir under which all the " & vbLf & _
+ " _res.bas files are located to import from" & vbLf & vbLf & _
+ "/T:<targetDir> target directory " & vbLf & _
+ " <targetDir> is where the new Driver docs" & vbLf & _
+ " will be created", 30
+End Sub
+
+'######################
+Sub FinalExit()
+ DACleanUp
+ wscript.quit
+End Sub
+
+'######################
+Sub ImportAll( aTargetDir )
+
+ '#### Create automation servers ####
+ DAsetupWrdServer
+ DAsetupExcelServer
+ DAsetupPPServer
+
+ If Not daFso.FolderExists( aTargetDir ) Then
+ daFso.CreateFolder( aTargetDir )
+ End If
+
+ BackupDrivers aTargetDir
+
+ DAOpenWrdDriver mSourceDir & "\" & CSTUB & CWORD_DRIVER
+ DAOpenExcelDriver mSourceDir & "\" & CSTUB & CEXCEL_DRIVER
+ DAOpenPPDriver mSourceDir & "\" & CSTUB & CPP_DRIVER
+
+ DASetTitle CTITLE & " - Import"
+
+ ImportSelectedProjectFiles mSourceDir, CUTIL_APPNAME_WORD
+ ImportSelectedProjectFiles mSourceDir, CUTIL_APPNAME_EXCEL
+ ImportSelectedProjectFiles mSourceDir, CUTIL_APPNAME_POWERPOINT
+
+ DAsaveWrdDriver aTargetDir & "\" & CWORD_DRIVER
+ DAsaveExcelDriver aTargetDir & "\" & CEXCEL_DRIVER
+ DAsavePPDriver aTargetDir & "\" & CPP_DRIVER
+
+ DACloseApps
+End Sub
+
+'######################
+Sub BackupDrivers(importdir)
+ On Error Resume Next
+
+ Dim wrdPath
+ Dim xlsPath
+ Dim ppPath
+
+ wrdPath = daFso.GetAbsolutePathName(importdir & "\" & CWORD_DRIVER)
+ xlsPath= daFso.GetAbsolutePathName(importdir & "\" & CEXCEL_DRIVER)
+ ppPath= daFso.GetAbsolutePathName(importdir & "\" & CPP_DRIVER)
+
+ If daFso.FileExists( wrdPath ) Then daFso.CopyFile wrdPath, wrdPath & ".bak"
+ If daFso.FileExists( xlsPath ) Then daFso.CopyFile xlsPath, xlsPath & ".bak"
+ If daFso.FileExists( ppPath ) Then daFso.CopyFile ppPath, ppPath & ".bak"
+End Sub
+
+'######################
+Sub ImportSelectedProjectFiles(dir, app_name)
+ On Error Resume Next
+
+ Dim base
+ Dim lcApp_name
+ lcApp_name = LCase(app_name)
+
+ 'Driver Specific
+ base = dir & "\" & lcApp_name & "\"
+
+ DAImportFile base & "ApplicationSpecific.bas", "ApplicationSpecific", app_name
+ DAImportFile base & "MigrationAnalyser.cls", "MigrationAnalyser", app_name
+
+ DAImportFile base & "Preparation.bas", "Preparation", app_name
+
+ 'app resource
+ DAImportFile base & lcApp_name & "_res.bas", lcApp_name & "_res", app_name
+
+ 'Common
+ base = dir & "\"
+ DAImportFile base & "AnalysisDriver.bas", "AnalysisDriver", app_name
+ DAImportFile base & "CommonMigrationAnalyser.bas", "CommonMigrationAnalyser", app_name
+ DAImportFile base & "CollectedFiles.cls", "CollectedFiles", app_name
+ DAImportFile base & "DocumentAnalysis.cls", "DocumentAnalysis", app_name
+ DAImportFile base & "FileTypeAssociation.cls", "FileTypeAssociation", app_name
+ DAImportFile base & "IssueInfo.cls", "IssueInfo", app_name
+ DAImportFile base & "PrepareInfo.cls", "PrepareInfo", app_name
+ DAImportFile base & "StringDataManager.cls", "StringDataManager", app_name
+ DAImportFile base & "LocalizeResults.bas", "LocalizeResults", app_name
+
+ DAImportFile base & "CommonPreparation.bas", "CommonPreparation", app_name
+
+ 'common resource
+ DAImportFile base & "common_res.bas", "common_res", app_name
+ DAImportFile base & "results_res.bas", "results_res", app_name
+
+End Sub
+
+</script>
+</job>
+
diff --git a/migrationanalysis/src/driver_docs/DocAnalysisRunMacro.vbs b/migrationanalysis/src/driver_docs/DocAnalysisRunMacro.vbs
new file mode 100644
index 000000000000..7ec5083107cd
--- /dev/null
+++ b/migrationanalysis/src/driver_docs/DocAnalysisRunMacro.vbs
@@ -0,0 +1,441 @@
+'/*************************************************************************
+' *
+' * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+' *
+' * Copyright 2008 by Sun Microsystems, Inc.
+' *
+' * OpenOffice.org - a multi-platform office productivity suite
+' *
+' * $RCSfile: DocAnalysisRunMacro.vbs,v $
+' * $Revision: 1.2.140.1 $
+' *
+' * This file is part of OpenOffice.org.
+' *
+' * OpenOffice.org is free software: you can redistribute it and/or modify
+' * it under the terms of the GNU Lesser General Public License version 3
+' * only, as published by the Free Software Foundation.
+' *
+' * OpenOffice.org is distributed in the hope that it will be useful,
+' * but WITHOUT ANY WARRANTY; without even the implied warranty of
+' * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+' * GNU Lesser General Public License version 3 for more details
+' * (a copy is included in the LICENSE file that accompanied this code).
+' *
+' * You should have received a copy of the GNU Lesser General Public License
+' * version 3 along with OpenOffice.org. If not, see
+' * <http://www.openoffice.org/license.html>
+' * for a copy of the LGPLv3 License.
+' *
+' ************************************************************************/
+'### Support Module for running macros in Word. Excel and Powerpoint
+'### using automation
+
+CONST CDA_TITLE = "Document Analysis Run Macro"
+CONST CDA_ANALYSIS_INI = "analysis.ini"
+Const CDA_ERR_STD_DELAY = 10
+Const CDA_APPNAME_WORD = "Word"
+Const CDA_APPNAME_EXCEL = "Excel"
+Const CDA_APPNAME_POWERPOINT = "Powerpoint"
+
+Dim daWrd
+Dim daDoc
+Dim daXl
+Dim daWb
+Dim daPP
+Dim daPres
+Dim daWshShell
+Dim daFso
+Dim daTitle
+
+daTitle = CDA_TITLE
+
+'# Setup Scripting objects
+set daFso = WScript.CreateObject("Scripting.FileSystemObject")
+set daWshShell = Wscript.CreateObject("Wscript.Shell")
+
+
+'##### Run Macro FUNCTIONS ######
+
+'######################
+Sub DASetTitle(newTitle)
+ daTitle = newTitle
+End Sub
+
+'######################
+Sub DAsetupWrdServer
+
+On Error Resume Next
+
+Set daWrd = wscript.CreateObject("Word.Application")
+If Err.Number <> 0 Then
+ DAErrMsg "Failed to create Word Automation server: " & vbLf & vbLf & "Error: " _
+ & CStr(Err.Number) & " " & Err.Description, CDA_ERR_STD_DELAY
+ FinalExit
+End If
+
+End Sub
+
+'######################
+Sub DAOpenWrdDriver(driver)
+Dim sWordDriverDocPath
+
+On Error Resume Next
+daWrd.Visible = False
+
+'# Open a driver doc
+sWordDriverDocPath = daFso.GetAbsolutePathName(driver)
+'DAdiagMsg "sWordDriverDocPath : " & sWordDriverDocPath , CDIAG_STD_DELAY
+
+If Not daFso.FileExists(sWordDriverDocPath) Then
+ DAErrMsg "Driver doc does not exist: " & sWordDriverDocPath, CDA_ERR_STD_DELAY
+ FinalExit
+End If
+
+Set daDoc = daWrd.Documents.Open(sWordDriverDocPath)
+If Err.Number <> 0 Then
+ DAErrMsg "Failed to open driver doc: " & vbLf & sWordDriverDocPath & vbLf & vbLf & "Error: " _
+ & CStr(Err.Number) & " " & Err.Description, CDA_ERR_STD_DELAY
+ FinalExit
+End If
+
+End Sub
+
+'######################
+Function DArunWrdDriver(driver, macro)
+
+On Error Resume Next
+'# Run macro
+DArunWrdDriver = True
+daWrd.Run ("AnalysisTool." & macro)
+If Err.Number <> 0 Then
+ DAErrMsg "Failed to run macro: " & macro & vbLf & vbLf & "Error: " _
+ & CStr(Err.Number) & " " & Err.Description, CDA_ERR_STD_DELAY
+ DArunWrdDriver = False
+End If
+
+End Function
+
+'######################
+Sub DAsaveWrdDriver(saveDriver)
+'DAdiagMsg "saveDriver : " & saveDriver , CDIAG_STD_DELAY
+'DAdiagMsg "Abs(saveDriver) : " & daFso.GetAbsolutePathName( saveDriver) , CDIAG_STD_DELAY
+ daDoc.SaveAs daFso.GetAbsolutePathName( saveDriver)
+End Sub
+
+'######################
+Sub DAsetupExcelServer
+
+On Error Resume Next
+
+Set daXl = wscript.CreateObject("Excel.Application")
+If Err.Number <> 0 Then
+ DAErrMsg "Failed to create Excel Automation server: " & vbLf & vbLf & "Error: " _
+ & CStr(Err.Number) & " " & Err.Description, CDA_ERR_STD_DELAY
+ FinalExit
+End If
+
+End Sub
+
+'######################
+Sub DAOpenExcelDriver(driver)
+ Dim sExcelDriverDocPath
+
+ On Error Resume Next
+ daXl.Visible = False
+
+ '# Open driver doc
+ sExcelDriverDocPath = daFso.GetAbsolutePathName(driver)
+ If Not daFso.FileExists(sExcelDriverDocPath) Then
+ DAErrMsg "Driver doc does not exist: " & sExcelDriverDocPath, CDA_ERR_STD_DELAY
+ FinalExit
+ End If
+
+ Set daWb = daXl.Workbooks.Open(sExcelDriverDocPath)
+ If Err.Number <> 0 Then
+ DAErrMsg "Failed to open driver doc: " & vbLf & sExcelDriverDocPath & vbLf & vbLf & "Error: " _
+ & CStr(Err.Number) & " " & Err.Description, CDA_ERR_STD_DELAY
+ FinalExit
+ End If
+
+End Sub
+
+'######################
+Function DArunExcelDriver(driver, macro)
+On Error Resume Next
+
+'# Run macro
+DArunExcelDriver = True
+daXl.Run ("AnalysisTool." & macro)
+If Err.Number <> 0 Then
+ DAErrMsg "Failed to run macro: " & macro & vbLf & vbLf & "Error: " _
+ & CStr(Err.Number) & " " & Err.Description, CDA_ERR_STD_DELAY
+ DArunExcelDriver = False
+End If
+
+End Function
+
+'######################
+Sub DAsaveExcelDriver(saveDriver)
+ '# Not overwritting - Excel hangs, need to remove file first
+ if daFso.FileExists(daFso.GetAbsolutePathName(saveDriver)) Then
+ daFso.DeleteFile(daFso.GetAbsolutePathName(saveDriver))
+ End If
+ daWb.SaveAs daFso.GetAbsolutePathName(saveDriver)
+End Sub
+
+'######################
+Sub DAsetupPPServer
+
+On Error Resume Next
+
+Set daPP = wscript.CreateObject("PowerPoint.Application")
+If Err.Number <> 0 Then
+ DAErrMsg "Failed to create PowerPoint Automation server: " & vbLf & vbLf & "Error: " _
+ & CStr(Err.Number) & " " & Err.Description, CDA_ERR_STD_DELAY
+ FinalExit
+End If
+
+End Sub
+
+'######################
+Sub DAOpenPPDriver(driver)
+Dim sPPDriverDocPath
+
+On Error Resume Next
+
+
+'# Open driver doc
+sPPDriverDocPath = daFso.GetAbsolutePathName(driver)
+If Not daFso.FileExists(sPPDriverDocPath ) Then
+ DAErrMsg "Driver doc does not exist: " & sPPDriverDocPath, CDA_ERR_STD_DELAY
+ FinalExit
+End If
+
+
+'## MS: KB Article 155073 ##
+'# PPT7: OLE Automation Error Using Open Method
+'# MUST show the PowerPoint application window at least once before calling the Application.Presentations.Open method
+daPP.Visible = True
+daPP.WindowState = 2 'Minimize PowerPoint
+
+daPP.Presentations.Open sPPDriverDocPath
+If Err.Number <> 0 Then
+ DAErrMsg "Failed to open driver doc: " & vbLf & sPPDriverDocPath & vbLf & vbLf & "Error: " _
+ & CStr(Err.Number) & " " & Err.Description, CDA_ERR_STD_DELAY
+ FinalExit
+End If
+
+set daPres = daPP.Presentations(1)
+
+End Sub
+
+'######################
+Function DArunPPDriver(driver, macro)
+
+On Error Resume Next
+'# Run macro
+DArunPPDriver = True
+daPP.Run (daFso.GetFileName(driver) & "!" & macro)
+If Err.Number <> 0 Then
+ DAErrMsg "Failed to run macro: " & macro & vbLf & vbLf & "Error: " _
+ & CStr(Err.Number) & " " & Err.Description, CDA_ERR_STD_DELAY
+ DArunPPDriver = False
+End If
+
+End Function
+
+'######################
+Sub DAsavePPDriver(saveDriver)
+ daPres.SaveAs daFso.GetAbsolutePathName(saveDriver)
+End Sub
+
+
+'######################
+
+Sub DACloseApps()
+ '# Quit apps
+ On Error Resume Next
+ If Not daWrd Is Nothing Then
+ daDoc.Close wdDoNotSaveChanges
+ daWrd.Quit
+ End If
+ If Not daXl Is Nothing Then
+ daWb.Close False
+ daXl.Quit
+ End If
+ If Not daPP Is Nothing Then
+ daPres.Close
+ daPP.Quit
+ End If
+
+ Set daDoc = Nothing
+ Set daWb = Nothing
+ Set daPres = Nothing
+
+ Set daWrd = Nothing
+ Set daXl = Nothing
+ Set daPP = Nothing
+End Sub
+
+'######################
+
+Sub DACleanUp()
+ '# Quit apps
+ On Error Resume Next
+
+ DACloseApps
+
+ Set daFso = Nothing
+ Set daWshShell = Nothing
+End Sub
+
+
+'######################
+Sub DAdiagMsg( msg, delay)
+ '# WSHShell.echo: Popup if run with Wscript.exe, command line output if run with Cscript.exe
+ WScript.Echo msg
+
+ 'WSHShell.popup msg, delay, daTitle, 64
+End Sub
+
+'######################
+Sub DAErrMsg( msg, delay)
+ daWshShell.Popup msg, delay, daTitle, 16
+
+ 'WScript.Echo msg
+End Sub
+
+'######################
+Sub DAVerifyAnalysisIni()
+ if daFso.FileExists(daFso.GetAbsolutePathName(".\" & CDA_ANALYSIS_INI)) Then Exit Sub
+
+ DAErrMsg CDA_ANALYSIS_INI & " does not exist. " & vbLf & vbLf & _
+ "You need to create it manually or use the DocAnalysisWizard to create one for you." & vbLf & _
+ "Once this is done you can rerun the Document Analysis command line.", CDA_ERR_STD_DELAY
+ FinalExit
+End Sub
+
+'######################
+Sub DAExportFile(fileName, projectFile, app_name)
+ On Error Resume Next
+
+ Dim myProject
+
+ '# Setup App Specifc VB Project
+ Set myProject = DAgetProject(fileName, projectFile, app_name)
+
+ Dim myComponent
+ Set myComponent = myProject.VBComponents(projectFile)
+ If Err.Number <> 0 Then
+ DAErrMsg "Missing Project File [" & projectFile & "] - Path:" & vbLf & vbLf & fileName, CERR_STD_DELAY
+ Set myComponent = Nothing
+ Set myProject = Nothing
+ FinalExit
+ End If
+
+ myProject.VBComponents(projectFile).Export fileName
+ If Err.Number <> 0 Then
+ DAErrMsg "Error exporting Project File [" & projectFile & "] - Path:" & vbLf & vbLf & fileName, CERR_STD_DELAY
+ Set myComponent = Nothing
+ Set myProject = Nothing
+ FinalExit
+ End If
+
+ Set myComponent = Nothing
+ Set myProject = Nothing
+
+End Sub
+
+'######################
+Sub DAImportFile(fileName, projectFile, app_name)
+ On Error Resume Next
+
+ Dim myProject
+
+ '# Setup App Specifc VB Project
+ Set myProject = DAgetProject(fileName, projectFile, app_name)
+
+ '# Check if module already exists raise error
+ Dim myComponent
+ Set myComponent = myProject.VBComponents(projectFile)
+ If Err.Number = 0 Then
+ DAErrMsg "Duplicate Project File [" & projectFile & "] - Path:" & vbLf & vbLf & fileName, CERR_STD_DELAY
+ Set myComponent = Nothing
+ Set myProject = Nothing
+ FinalExit
+ End If
+
+ '#If module not there need to clear out of index error
+ Err.Clear
+
+ If Not daFso.FileExists(fileName) Then
+ DAErrMsg "Missing File " & fileName, CERR_STD_DELAY
+ Set myComponent = Nothing
+ Set myProject = Nothing
+ FinalExit
+ End If
+
+ Call myProject.VBComponents.Import(fileName)
+
+ If Err.Number <> 0 Then
+ DAErrMsg "Error importing Project File [" & projectFile & "] - Path:" & vbLf & vbLf & fileName, CERR_STD_DELAY
+ Set myComponent = Nothing
+ Set myProject = Nothing
+ FinalExit
+ End If
+
+ Set myComponent = Nothing
+ Set myProject = Nothing
+End Sub
+
+'#################
+
+Sub DARemoveModule(fileName, projectFile, app_name)
+ On Error Resume Next
+
+ Dim myProject
+
+ '# Setup App Specifc VB Project
+ Set myProject = DAgetProject(fileName, projectFile, app_name)
+
+ '# Check if module already exists raise error
+ Dim myComponent
+ Set myComponent = myProject.VBComponents(projectFile)
+
+
+ myProject.VBComponents.Remove myComponent
+
+ If Err.Number <> 0 Then
+ DAErrMsg "Error removing Project File [" & projectFile & "] - Path:" & vbLf & vbLf & fileName, CERR_STD_DELAY
+ Set myComponent = Nothing
+ Set myProject = Nothing
+ FinalExit
+ End If
+
+ Set myComponent = Nothing
+ Set myProject = Nothing
+End Sub
+
+'######################
+Function DAgetProject(fileName, projectFile, app_name)
+ On Error Resume Next
+
+ If app_name = CDA_APPNAME_WORD Then
+ Set DAgetProject = daWrd.ActiveDocument.VBProject
+
+ ElseIf app_name = CDA_APPNAME_EXCEL Then
+ Set DAgetProject = daXl.ActiveWorkbook.VBProject
+
+ ElseIf app_name = CDA_APPNAME_POWERPOINT Then
+ Set DAgetProject = daPP.ActivePresentation.VBProject
+ End If
+
+ If Err.Number <> 0 Then
+ DAErrMsg "Cannot access VBProject for Project File [" & projectFile & "] - Path:" & vbLf & vbLf & fileName, _
+ CERR_STD_DELAY
+ Set DAgetProject = Nothing
+ FinalExit
+ End If
+
+End Function
+
diff --git a/migrationanalysis/src/driver_docs/PAW/_OOoDocAnalysisExcelDriver.xls b/migrationanalysis/src/driver_docs/PAW/_OOoDocAnalysisExcelDriver.xls
new file mode 100644
index 000000000000..a5a52adc1350
--- /dev/null
+++ b/migrationanalysis/src/driver_docs/PAW/_OOoDocAnalysisExcelDriver.xls
Binary files differ
diff --git a/migrationanalysis/src/driver_docs/PAW/_OOoDocAnalysisPPTDriver.ppt b/migrationanalysis/src/driver_docs/PAW/_OOoDocAnalysisPPTDriver.ppt
new file mode 100644
index 000000000000..e5f9de418b9a
--- /dev/null
+++ b/migrationanalysis/src/driver_docs/PAW/_OOoDocAnalysisPPTDriver.ppt
Binary files differ
diff --git a/migrationanalysis/src/driver_docs/PAW/_OOoDocAnalysisWordDriver.doc b/migrationanalysis/src/driver_docs/PAW/_OOoDocAnalysisWordDriver.doc
new file mode 100644
index 000000000000..501274bc5220
--- /dev/null
+++ b/migrationanalysis/src/driver_docs/PAW/_OOoDocAnalysisWordDriver.doc
Binary files differ
diff --git a/migrationanalysis/src/driver_docs/allstrings.ulf b/migrationanalysis/src/driver_docs/allstrings.ulf
new file mode 100644
index 000000000000..0f36a93290ff
--- /dev/null
+++ b/migrationanalysis/src/driver_docs/allstrings.ulf
@@ -0,0 +1,2371 @@
+[RID_STR_COMMON_PRODUCTNAME]
+en-US = "OpenOffice.org"
+
+[RID_STR_COMMON_PRODUCTVERSION]
+en-US = "3.0"
+
+[RID_STR_COMMON_NEXTPRODUCTVERSION]
+en-US = "3.1"
+
+[RID_STR_COMMON_OLE_CONTROL]
+en-US = "OLE Control"
+
+[RID_STR_COMMON_OLE_FIELD_LINK]
+en-US = "OLE Field Link"
+
+[RID_STR_COMMON_OLE_UNKNOWN]
+en-US = "Unknown Type"
+
+[RID_STR_COMMON_VB_COMPONENT_MODULE]
+en-US = "Module"
+
+[RID_STR_COMMON_VB_COMPONENT_STANDARD]
+en-US = "Standard Module"
+
+[RID_STR_COMMON_VB_COMPONENT_CLASS]
+en-US = "Class Module"
+
+[RID_STR_COMMON_VB_COMPONENT_USER_FORM]
+en-US = "User Form"
+
+[RID_STR_COMMON_VB_COMPONENT_DOCUMENT]
+en-US = "Document"
+
+[RID_STR_COMMON_VB_COMPONENT_ACTIVEX_DESIGNER]
+en-US = "ActiveX Designer"
+
+[RID_STR_COMMON_VB_COMPONENT_UNKNOWN]
+en-US = "Unknown"
+
+[RID_STR_COMMON_YES_OR_NO]
+en-US = "Yes or No"
+
+[RID_STR_COMMON_DATE]
+en-US = "Date"
+
+[RID_STR_COMMON_NUMBER]
+en-US = "Number"
+
+[RID_STR_COMMON_TEXT]
+en-US = "Text"
+
+[RID_STR_COMMON_UNKNOWN]
+en-US = "Unknown"
+
+[RID_STR_COMMON_DEC_TO_EXTERNAL_LIBRARY]
+en-US = "Declaration to external library"
+
+[RID_STR_COMMON_RESULTS_LOCATION_TYPE_DOCUMENT]
+en-US = "Document"
+
+[RID_STR_COMMON_RESULTS_LOCATION_TYPE_PAGE]
+en-US = "Page"
+
+[RID_STR_COMMON_RESULTS_LOCATION_TYPE_WORKBOOK]
+en-US = "WorkBook"
+
+[RID_STR_COMMON_RESULTS_LOCATION_TYPE_SHEET]
+en-US = "Sheet"
+
+[RID_STR_COMMON_RESULTS_LOCATION_TYPE_PRESENTATION]
+en-US = "Presentation"
+
+[RID_STR_COMMON_RESULTS_LOCATION_TYPE_SLIDE]
+en-US = "Slide"
+
+[RID_STR_COMMON_INVALID_PASSWORD]
+en-US = "Invalid Password"
+
+[RID_STR_COMMON_PASSWORD_SKIPDOC]
+en-US = "Skip Password Protected"
+
+[RID_STR_COMMON_NA]
+en-US = "na"
+
+[RID_STR_COMMON_ATTRIBUTE_BROKEN]
+en-US = "Broken!"
+
+[RID_STR_COMMON_ATTRIBUTE_BUILTIN]
+en-US = "BuiltIn"
+
+[RID_STR_COMMON_ATTRIBUTE_CHECK_DOCUMENT_REFERENCES]
+en-US = "Check document VB-IDE/Tools/References"
+
+[RID_STR_COMMON_ATTRIBUTE_CLASS_ME_COUNT]
+en-US = "Class refs to Me"
+
+[RID_STR_COMMON_ATTRIBUTE_COMPONENT]
+en-US = "Component"
+
+[RID_STR_COMMON_ATTRIBUTE_CONTROLS]
+en-US = "Controls"
+
+[RID_STR_COMMON_ATTRIBUTE_CUSTOM]
+en-US = "Custom"
+
+[RID_STR_COMMON_ATTRIBUTE_DESCRIPTION]
+en-US = "Description"
+
+[RID_STR_COMMON_ATTRIBUTE_GUID]
+en-US = "GUID"
+
+[RID_STR_COMMON_ATTRIBUTE_FILE]
+en-US = "File"
+
+[RID_STR_COMMON_ATTRIBUTE_PROPERTIES]
+en-US = "Properties"
+
+[RID_STR_COMMON_ATTRIBUTE_FURTHER_MACRO_ANALYSIS_NOT_POSSIBLE]
+en-US = "Further macro analysis not possible"
+
+[RID_STR_COMMON_ATTRIBUTE_INCLUDING]
+en-US = "including:"
+
+[RID_STR_COMMON_ATTRIBUTE_INTACT]
+en-US = "Intact"
+
+[RID_STR_COMMON_ATTRIBUTE_ISBROKEN]
+en-US = "IsBroken"
+
+[RID_STR_COMMON_ATTRIBUTE_MAJOR]
+en-US = "Major"
+
+[RID_STR_COMMON_ATTRIBUTE_MINOR]
+en-US = "Minor"
+
+[RID_STR_COMMON_ATTRIBUTE_MISSING]
+en-US = "MISSING"
+
+[RID_STR_COMMON_ATTRIBUTE_NAME]
+en-US = "Name"
+
+[RID_STR_COMMON_ATTRIBUTE_NON_PORTABLE_EXTERNAL_REFERENCES]
+en-US = "Non Portable External References"
+
+[RID_STR_COMMON_ATTRIBUTE_NON_PORTABLE_EXTERNAL_REFERENCES_COUNT]
+en-US = "External Reference Count"
+
+[RID_STR_COMMON_ATTRIBUTE_NUMBER_OF_LINES]
+en-US = "Number of Lines"
+
+[RID_STR_COMMON_ATTRIBUTE_SIGNATURE]
+en-US = "MD5 Hash"
+
+[RID_STR_COMMON_ATTRIBUTE_PASSWORD]
+en-US = "Password"
+
+[RID_STR_COMMON_ATTRIBUTE_PATH]
+en-US = "Path"
+
+[RID_STR_COMMON_ATTRIBUTE_PROCEDURES]
+en-US = "Procedures"
+
+[RID_STR_COMMON_ATTRIBUTE_PROJECT]
+en-US = "Project"
+
+[RID_STR_COMMON_ATTRIBUTE_TYPE]
+en-US = "Type"
+
+[RID_STR_COMMON_ATTRIBUTE_TYPELIB]
+en-US = "Type Library"
+
+[RID_STR_COMMON_ATTRIBUTE_UNABLE_TO_ACCESS_VBPROJECT]
+en-US = "Unable to access VBProject"
+
+[RID_STR_COMMON_ATTRIBUTE_UNKNOWN]
+en-US = "Unknown"
+
+[RID_STR_COMMON_ATTRIBUTE_USERFORM_TYPE]
+en-US = "Control Types"
+
+[RID_STR_COMMON_ATTRIBUTE_USERFORM_TYPES_COUNT]
+en-US = "Control Types Count"
+
+[RID_STR_COMMON_ATTRIBUTE_VALUE]
+en-US = "Value"
+
+[RID_STR_COMMON_ATTRIBUTE_VBPROJECT_PASSWORD]
+en-US = "VBProject Password set"
+
+[RID_STR_COMMON_ISSUE_INFORMATION]
+en-US = "Information"
+
+[RID_STR_COMMON_ISSUE_FORMAT]
+en-US = "Format"
+
+[RID_STR_COMMON_ISSUE_PORTABILITY]
+en-US = "Portability"
+
+[RID_STR_COMMON_ISSUE_VBA_MACROS]
+en-US = "VBA Macros"
+
+[RID_STR_COMMON_ISSUE_CONTENT_AND_DOCUMENT_PROPERTIES]
+en-US = "Content and Document Properties"
+
+[RID_STR_COMMON_NOTE_DOCUMENT_PROPERTIES_LOST]
+en-US = "this summary property is lost"
+
+[RID_STR_COMMON_SUBISSUE_PROPERTIES]
+en-US = "Properties"
+
+[RID_STR_COMMON_SUBISSUE_REFERENCES]
+en-US = "References"
+
+[RID_STR_COMMON_SUBISSUE_EXTERNAL_REFERENCES_IN_MACROS]
+en-US = "External References in Macro"
+
+[RID_STR_COMMON_SUBISSUE_INVALID_PASSWORD_ENTERED]
+en-US = "Invalid Password Entered"
+
+[RID_STR_COMMON_SUBISSUE_DOCUMENT_PARTS_PROTECTION]
+en-US = "Document Parts Protection"
+
+[RID_STR_COMMON_SUBISSUE_MACRO_PASSWORD_PROTECTION]
+en-US = "Password Protected"
+
+[RID_STR_COMMON_SUBISSUE_PASSWORDS_PROTECTION]
+en-US = "Password Protection"
+
+[RID_STR_COMMON_ATTRIBUTE_OBJECT_NAME]
+en-US = "Object Name"
+
+[RID_STR_COMMON_ATTRIBUTE_OBJECT_TYPE]
+en-US = "Object Type"
+
+[RID_STR_COMMON_ATTRIBUTE_SOURCE]
+en-US = "Source"
+
+[RID_STR_COMMON_NOTE_HF_PREPARABLE]
+en-US = "will add additional returns to the header/footer"
+
+[RID_STR_COMMON_PREPARATION_FOLDER]
+en-US = "prepared"
+
+[RID_STR_COMMON_SUBISSUE_DOCUMENT_CUSTOM_PROPERTY]
+en-US = "Document Custom Property"
+
+[RID_STR_COMMON_MACRO_CLASS_COMPLEX]
+en-US = "Complex"
+
+[RID_STR_COMMON_MACRO_CLASS_MEDIUM]
+en-US = "Medium"
+
+[RID_STR_COMMON_MACRO_CLASS_SIMPLE]
+en-US = "Simple"
+
+[RID_STR_COMMON_MACRO_CLASS_NONE]
+en-US = "No Macros"
+
+[RID_STR_COMMON_ISSUE_CLASS_COMPLEX]
+en-US = "Complex"
+
+[RID_STR_COMMON_ISSUE_CLASS_MINOR]
+en-US = "Minor"
+
+[RID_STR_COMMON_ISSUE_CLASS_NONE]
+en-US = "No Issues"
+
+[RID_STR_COMMON_OV_VERSION_STR]
+en-US = "Created by"
+
+[RID_STR_COMMON_OV_DOC_MOD_DATES_COMMENT_TITLE]
+en-US = "Which documents do you need to migrate?"
+
+[RID_STR_COMMON_OV_DOC_MOD_DATES_COMMENT_BODY]
+en-US = "<CR>The last modified date is an indicator of the importance of a document. It helps you decide which documents should just be archived to a read only format such as Adobe PDF and which actually need to be migrated to <PRODUCTNAME> where they can continue to be updated and modified."
+
+[RID_STR_COMMON_OV_LEGEND_TITLE]
+en-US = "Legend"
+
+[RID_STR_COMMON_OV_DOC_MOD_DATES_LEGEND_BODY]
+en-US = "< 3 months: Migrate to <PRODUCTNAME>.<CR>3 - 6 Months: Careful review to see if they should be archived or migrated to <PRODUCTNAME>.<CR>6 - 12 Months: Quick review, either archive or migrate to the read/write <PRODUCTNAME> XML file format.<CR>> 1 Year: Older than 1 year, archive to read-only format such as PDF"
+
+[RID_STR_COMMON_OV_DOC_MACRO_COMMENT_TITLE]
+en-US = "How many documents contain macros?"
+
+[RID_STR_COMMON_OV_DOC_MACRO_COMMENT_BODY]
+en-US = "<CR><PRODUCTNAME> includes <PRODUCTNAME> BASIC, a Basic dialect that is similar to Microsoft's Visual Basic for Application (VBA), but <PRODUCTNAME> uses a different sets of objects to access the underlying Office.<CR>This makes it necessary to migrate the VBA macros into the platform independent <PRODUCTNAME> BASIC. Your local <PRODUCTNAME> Migration partner can help you with these VBA macro migrations."
+
+[RID_STR_COMMON_OV_DOC_MACRO_LEGEND_BODY]
+en-US = "Complex: Macros using Forms, Controls and external references<CR>Medium: Macros with more than 50 lines of code<CR>Simple: Macros with less than 50 lines of code<CR>None: No macros in the document"
+
+[RID_STR_COMMON_OV_HIGH_LEVEL_ANALYSIS_DAW]
+en-US = "Analysis of document migration issues for documents modified within the last <TOPIC> months"
+
+[RID_STR_COMMON_OV_HIGH_LEVEL_ANALYSIS_PAW_NO_LIMIT]
+en-US = "High level analysis of document migration issues"
+
+[RID_STR_COMMON_OV_DOC_ANALYSIS_COMMENT_TITLE]
+en-US = "Which documents may have migration issues?"
+
+[RID_STR_COMMON_OV_DOC_ANALYSIS_COMMENT_BODY]
+en-US = "<CR>Some Microsoft Office documents may not migrate perfectly into <PRODUCTNAME>. These issues are outlined in the <PRODUCTNAME> Migration Guide. <PRODUCTNAME> engineering is working continously to resolve these issues by improving the Microsoft Office filters.<CR>The Document Analysis Wizard has been provided by <PRODUCTNAME> engineering to detect the most important of these migration issues in any Microsoft Office document you wish to specify. These findings are summarised below [refer to the 'List of documents' sheet to see the list of all analyzed documents]."
+
+[RID_STR_COMMON_OV_DOC_ANALYSIS_DAW_LEGEND_BODY]
+en-US = "Complex: More complex migration issues.<CR>Minor: Minor migration issues easily fixed by any user.<CR>None: No issues Migrate to <PRODUCTNAME> without any issues.<CR><CR>Your <PRODUCTNAME> Migration Partners can help you with these more complex migration issues [refer to link above]. For instance they can migrate these documents to custom templates that achieve the same functionality but work well in both Office environments allowing the documents to be freely exchanged."
+
+[RID_STR_COMMON_OV_DOC_ANALYSIS_PAW_LEGEND_BODY]
+en-US = "Complex: More complex migration issues.<CR>Minor: Minor migration issues easily fixed by any user.<CR>None: No issues Migrate to <PRODUCTNAME> without any issues."
+
+[RID_STR_COMMON_OV_DOC_MOD_DATES_CHART_TITLE]
+en-US = "Document modification dates"
+
+[RID_STR_COMMON_OV_DOC_MACRO_CHART_TITLE]
+en-US = "Document with Macro Migration Issues"
+
+[RID_STR_COMMON_OV_DOC_ANALYSIS_CHART_TITLE]
+en-US = "Documents with Document Migration Issues"
+
+[RID_STR_COMMON_PREPARATION_NOTE]
+en-US = "Preparation"
+
+[RID_STR_COMMON_CANNOT_OPEN]
+en-US = "Cannot open - no analysis possible"
+
+[RID_STR_COMMON_RESULTS_SHEET_NAME_OVERVIEW]
+en-US = "Overview"
+
+[RID_STR_COMMON_RESULTS_SHEET_NAME_COSTS]
+en-US = "Issues Analyzed"
+
+[RID_STR_COMMON_RESULTS_SHEET_NAME_DOCISSUES_WORD]
+en-US = "Word Issues"
+
+[RID_STR_COMMON_RESULTS_SHEET_NAME_DOCISSUES_EXCEL]
+en-US = "Excel Issues"
+
+[RID_STR_COMMON_RESULTS_SHEET_NAME_DOCISSUES_POWERPOINT]
+en-US = "PowerPoint Issues"
+
+[RID_STR_COMMON_RESULTS_SHEET_NAME_DOCISSUE_DETAILS]
+en-US = "Issue Details"
+
+[RID_STR_COMMON_RESULTS_SHEET_NAME_DOCREF_DETAILS]
+en-US = "Reference Details"
+
+[RID_STR_COMMON_RESULTS_SHEET_NAME_DOCPROP]
+en-US = "List of documents"
+
+[RID_STR_COMMON_ANALYSIS_STR]
+en-US = "Analysis"
+
+[RID_STR_COMMON_NOTE_PRE]
+en-US = "Note"
+
+[RID_STR_COMMON_NOTE_POST]
+en-US = " on migration"
+
+[RID_STR_COMMON_OLE_EMBEDDED]
+en-US = "Embedded OLE Object"
+
+[RID_STR_COMMON_OLE_LINKED]
+en-US = "Linked OLE Object"
+
+[RID_STR_EXCEL_ISSUE_CHARTS_AND_TABLES]
+en-US = "Charts and Tables"
+
+[RID_STR_EXCEL_ISSUE_FORMAT]
+en-US = "Format"
+
+[RID_STR_EXCEL_ISSUE_FUNCTIONS]
+en-US = "Functions"
+
+[RID_STR_EXCEL_ISSUE_PORTABILITY]
+en-US = "Portability"
+
+[RID_STR_EXCEL_ISSUE_VBA_MACROS]
+en-US = "VBA Macros"
+
+[RID_STR_EXCEL_ISSUE_INFORMATION]
+en-US = "Information"
+
+[RID_STR_EXCEL_SUBISSUE_PIVOT]
+en-US = "Pivot"
+
+[RID_STR_EXCEL_SUBISSUE_ZOOM]
+en-US = "Zoom"
+
+[RID_STR_EXCEL_TRUE]
+en-US = "True"
+
+[RID_STR_EXCEL_FALSE]
+en-US = "False"
+
+[RID_STR_EXCEL_SUBISSUE_MAX_SHEETS_EXCEEDED]
+en-US = "Maximum Sheets Exceeded"
+
+[RID_STR_EXCEL_SUBISSUE_ATTRIBUTES]
+en-US = "Cell Attributes"
+
+[RID_STR_EXCEL_SUBISSUE_EXTERNAL]
+en-US = "External"
+
+[RID_STR_EXCEL_SUBISSUE_SHEET_CHART]
+en-US = "Sheet Chart"
+
+[RID_STR_EXCEL_SUBISSUE_EMBEDDED_CHART]
+en-US = "Embedded Chart"
+
+[RID_STR_EXCEL_SUBISSUE_INVALID_WORKSHEET_NAME]
+en-US = "Invalid Worksheet Name"
+
+[RID_STR_EXCEL_ATTRIBUTE_BADCHARACTER]
+en-US = "'<TOKEN1>' at pos <TOKEN2>"
+
+[RID_STR_EXCEL_ATTRIBUTE_DB_QUERY]
+en-US = "Connection string"
+
+[RID_STR_EXCEL_ATTRIBUTE_NAME]
+en-US = "Name"
+
+[RID_STR_EXCEL_ATTRIBUTE_NUMBER_OF_PIVOTFIELDS]
+en-US = "Number of PivotFields"
+
+[RID_STR_EXCEL_ATTRIBUTE_TITLE]
+en-US = "Title"
+
+[RID_STR_EXCEL_ATTRIBUTE_TYPE]
+en-US = "Type"
+
+[RID_STR_EXCEL_ATTRIBUTE_PIE]
+en-US = "Pie"
+
+[RID_STR_EXCEL_ATTRIBUTE_SLICES_IN_DIFFERENT_DIRECTION]
+en-US = "Slices in diff. direction"
+
+[RID_STR_EXCEL_ATTRIBUTE_LEGEND_NAME]
+en-US = "Legend Name"
+
+[RID_STR_EXCEL_ATTRIBUTE_NUMBER_OF_LEGEND_ENTRIES]
+en-US = "Number of Legend Entries"
+
+[RID_STR_EXCEL_ATTRIBUTE_PIVOT_TABLE_NAME]
+en-US = "PivotTable Name"
+
+[RID_STR_EXCEL_ATTRIBUTE_PIVOT_FIELDS_VISIBLE]
+en-US = "PivotFields Visible"
+
+[RID_STR_EXCEL_ATTRIBUTE_PIVOT_FIELDS_NUM]
+en-US = "Number of PivotFields"
+
+[RID_STR_EXCEL_ATTRIBUTE_PRINT_RANGE]
+en-US = "Print Range"
+
+[RID_STR_EXCEL_ATTRIBUTE_DISPLAY_ZOOM]
+en-US = "Display Zoom"
+
+[RID_STR_EXCEL_ATTRIBUTE_NUMBER_OF_SHEETS]
+en-US = "Number of Sheets"
+
+[RID_STR_EXCEL_ATTRIBUTE_LIST_SOURCE]
+en-US = "ListSource"
+
+[RID_STR_EXCEL_ATTRIBUTE_CUSTOM_FORMULA]
+en-US = "Custom Formula"
+
+[RID_STR_EXCEL_ATTRIBUTE_SET]
+en-US = "Set"
+
+[RID_STR_EXCEL_ATTRIBUTE_LINE_STYLE]
+en-US = "Line Style"
+
+[RID_STR_EXCEL_ATTRIBUTE_DASHED_DOT]
+en-US = "Dashed/Dot"
+
+[RID_STR_EXCEL_ATTRIBUTE_FILL_PATTERN]
+en-US = "Fill Pattern"
+
+[RID_STR_EXCEL_ATTRIBUTE_PATTERNED]
+en-US = "Patterned"
+
+[RID_STR_EXCEL_ATTRIBUTE_FUNCTION_STRING]
+en-US = "Function String"
+
+[RID_STR_EXCEL_ATTRIBUTE_PASSWORD_TO_OPEN]
+en-US = "Password to Open"
+
+[RID_STR_EXCEL_ATTRIBUTE_PASSWORD_TO_MODIFY]
+en-US = "Password to Modify"
+
+[RID_STR_EXCEL_ATTRIBUTE_OBJECT_TYPE]
+en-US = "Object Type"
+
+[RID_STR_EXCEL_ATTRIBUTE_OBJECT_NAME]
+en-US = "Object Name"
+
+[RID_STR_EXCEL_ATTRIBUTE_SOURCE]
+en-US = "Source"
+
+[RID_STR_EXCEL_ATTRIBUTE_VALUE]
+en-US = "Value"
+
+[RID_STR_EXCEL_ATTRIBUTE_UNABLE_TO_ACCESS_VBPROJECT]
+en-US = "Unable to access VBProject"
+
+[RID_STR_EXCEL_ATTRIBUTE_FURTHER_MACRO_ANALYSIS_NOT_POSSIBLE]
+en-US = "Further macro analysis not possible"
+
+[RID_STR_EXCEL_ATTRIBUTE_VBPROJECT_PASSWORD_SET]
+en-US = "VBProject Password Set"
+
+[RID_STR_EXCEL_ATTRIBUTE_PROJECT]
+en-US = "Project"
+
+[RID_STR_EXCEL_ATTRIBUTE_COMPONENT]
+en-US = "Component"
+
+[RID_STR_EXCEL_ATTRIBUTE_PROCEDURES]
+en-US = "Procedures"
+
+[RID_STR_EXCEL_ATTRIBUTE_NUMBER_OF_LINES]
+en-US = "Number of Lines"
+
+[RID_STR_EXCEL_ATTRIBUTE_CONTROLS]
+en-US = "Controls"
+
+[RID_STR_EXCEL_ATTRIBUTE_TYPES]
+en-US = "Types"
+
+[RID_STR_EXCEL_ATTRIBUTE_DESCRIPTION]
+en-US = "Description"
+
+[RID_STR_EXCEL_ATTRIBUTE_FILE]
+en-US = "File"
+
+[RID_STR_EXCEL_ATTRIBUTE_PATH]
+en-US = "Path"
+
+[RID_STR_EXCEL_ATTRIBUTE_MISSING]
+en-US = "MISSING"
+
+[RID_STR_EXCEL_ATTRIBUTE_CHECK_DOCUMENT_REFERENCES]
+en-US = "Check document VB-IDE/Tools/References"
+
+[RID_STR_EXCEL_ATTRIBUTE_MAJOR]
+en-US = "Major"
+
+[RID_STR_EXCEL_ATTRIBUTE_MINOR]
+en-US = "Minor"
+
+[RID_STR_EXCEL_ATTRIBUTE_BUILT_IN]
+en-US = "Built In"
+
+[RID_STR_EXCEL_ATTRIBUTE_INTACT]
+en-US = "Intact"
+
+[RID_STR_EXCEL_ATTRIBUTE_TYPELIB]
+en-US = "TypeLib"
+
+[RID_STR_EXCEL_ATTRIBUTE_GUID]
+en-US = "GUID"
+
+[RID_STR_EXCEL_ATTRIBUTE_CUSTOM]
+en-US = "Custom"
+
+[RID_STR_EXCEL_ATTRIBUTE_IS_BROKEN]
+en-US = "Is Broken"
+
+[RID_STR_EXCEL_ATTRIBUTE_BROKEN]
+en-US = "Broken!"
+
+[RID_STR_EXCEL_ATTRIBUTE_NON_PORTABLE_EXTERNAL_REFERENCES]
+en-US = "Non Portable External References"
+
+[RID_STR_EXCEL_ATTRIBUTE_INCLUDING]
+en-US = "including:"
+
+[RID_STR_EXCEL_ATTRIBUTE_PASSWORD]
+en-US = "Password"
+
+[RID_STR_EXCEL_ENUMERATION_CUSTOM]
+en-US = "Custom"
+
+[RID_STR_EXCEL_ENUMERATION_LIST]
+en-US = "List"
+
+[RID_STR_EXCEL_ENUMERATION_UNKNOWN]
+en-US = "Unknown"
+
+[RID_STR_EXCEL_ENUMERATION_LINE_STYLE_CONTINUOUS]
+en-US = "Continuous"
+
+[RID_STR_EXCEL_ENUMERATION_LINE_STYLE_DASH]
+en-US = "Dash"
+
+[RID_STR_EXCEL_ENUMERATION_LINE_STYLE_DASHDOT]
+en-US = "DashDot"
+
+[RID_STR_EXCEL_ENUMERATION_LINE_STYLE_DOT]
+en-US = "Dot"
+
+[RID_STR_EXCEL_ENUMERATION_LINE_STYLE_DOUBLE]
+en-US = "Double"
+
+[RID_STR_EXCEL_ENUMERATION_LINE_STYLE_SLANTDASHDOT]
+en-US = "SlantDashDot"
+
+[RID_STR_EXCEL_ENUMERATION_LINE_STYLE_LINESTYLENONE]
+en-US = "LineStyleNone"
+
+[RID_STR_EXCEL_NOTE_DB_QUERY]
+en-US = "The connection to the database in <PRODUCTNAME> will be lost . The data will appear correctly but can not be updated."
+
+[RID_STR_EXCEL_NOTE_INVALIDWORKSHEETNAME]
+en-US = "The worksheet name contains characters that are not supported by <PRODUCTNAME>. Please rename your sheet and exclude these characters."
+
+[RID_STR_EXCEL_NOTE_ZOOM]
+en-US = "all sheets will have the same zoom irrespective of their Excel View/Zoom setting after migration to <PRODUCTNAME>"
+
+[RID_STR_EXCEL_NOTE_CELL_ATTRIBUTES_3]
+en-US = "this line style is imported as a solid line. Only solid line syles are supported in <PRODUCTNAME>"
+
+[RID_STR_EXCEL_NOTE_CELL_ATTRIBUTES_4]
+en-US = "this fill pattern is imported as a solid gray. Only solid fill patterns are supported in <PRODUCTNAME>"
+
+[RID_STR_EXCEL_NOTE_CELL_FUNCTIONS_1]
+en-US = "this function returns platform dependent information specific to Windows and is not imported to <PRODUCTNAME>"
+
+[RID_STR_EXCEL_NOTE_CELL_FUNCTIONS_2]
+en-US = "this function returns error codes specific to Excel and is imported in <PRODUCTNAME> as the stub function ErrorType() always returning Err.520"
+
+[RID_STR_EXCEL_NOTE_CELL_FUNCTIONS_3]
+en-US = "this is an external function referenced from an Excel spreadsheet. It does not import correctly to <PRODUCTNAME>. The external reference is stripped and the resulting formula always returns #ADDIN?"
+
+[RID_STR_EXCEL_NOTE_DOCUMENT_PROPERTIES_1]
+en-US = "this summary property is lost"
+
+[RID_STR_EXCEL_NOTE_DOCUMENT_PROPERTIES_2]
+en-US = "this custom property is lost"
+
+[RID_STR_EXCEL_NOTE_SHEET_LIMITS_1]
+en-US = "all sheets will be lost in <PRODUCTNAME> that are greater than "
+
+[RID_STR_EXCEL_NOTE_SHEET_LIMITS_2]
+en-US = "all sheets must be moved to a new workbook before migration that are greater than "
+
+[RID_STR_EXCEL_SUBLOCATION_NA]
+en-US = "na"
+
+[RID_STR_EXCEL_SUBISSUE_WORKBOOK_PROTECTION]
+en-US = "Workbook Protection"
+
+[RID_STR_EXCEL_ATTRIBUTE_PROTECT_TYPE_SHARING]
+en-US = "Protection Sharing"
+
+[RID_STR_EXCEL_ATTRIBUTE_PROTECT_TYPE_STRUCTURE]
+en-US = "Protection Structure"
+
+[RID_STR_EXCEL_ATTRIBUTE_PROTECT_TYPE_WINDOWS]
+en-US = "Protection Windows"
+
+[RID_STR_EXCEL_NOTE_PASSWORD_TO_OPEN]
+en-US = "workbook is protected"
+
+[RID_STR_EXCEL_NOTE_DATATABLE]
+en-US = "no simple workaround, could copy the data table and paste below the chart"
+
+[RID_STR_EXCEL_NOTE_XAXISCATEGORY]
+en-US = "only category option supported. Setup your category labels you need on the sheet"
+
+[RID_STR_EXCEL_NOTE_UNSUPPORTEDTYPE1]
+en-US = "following chart types not supported"
+
+[RID_STR_EXCEL_NOTE_UNSUPPORTEDTYPE2]
+en-US = "pie of pie,exploded 3D pie,bar of pie,bubble,filled radar,exploded doughnut"
+
+[RID_STR_EXCEL_NOTE_TRENDLINE]
+en-US = "replace the trend line by drawing a line on the chart. You must click outside the chart when adding the line and drag it onto the chart. Objects created by clicking on the chart will not import"
+
+[RID_STR_EXCEL_NOTE_DATALABELWITHLEGEND]
+en-US = "after import into <PRODUCTNAME>, select Insert->Data Labels->show legend icon with label and the legend key will appear"
+
+[RID_STR_EXCEL_NOTE_LEGENDPOSITION]
+en-US = "only legend to the right is supported on import. Change legend position in <PRODUCTNAME> after import"
+
+[RID_STR_EXCEL_NOTE_TITLEFONT]
+en-US = "title font with different font size is not supported on import, set a sub-title in <PRODUCTNAME>, then change the font size"
+
+[RID_STR_EXCEL_NOTE_SERIESCHARTTYPE]
+en-US = "multiple series with different chart types. SO only supports one chart type for all series. Adjust the chart type to best display the series"
+
+[RID_STR_EXCEL_NOTE_DATASOURCENOTLINKEDTOCELL]
+en-US = "data sources to catalogue or other external sources not supported. Data source must be set to cell or range on the sheet"
+
+[RID_STR_EXCEL_NOTE_CATEGORYANDDATA]
+en-US = "category names must be located above or to the left of the value ranges"
+
+[RID_STR_EXCEL_NOTE_DATASOURCEONDIFFERENTSHEET]
+en-US = "data sources must be located on the same sheet. Paste the data sources onto the same sheet"
+
+[RID_STR_EXCEL_NOTE_CATEGORYLABELMORETHANONECELL]
+en-US = "category labels spanning multiple cells are not supported. Copy all the text to one cell"
+
+[RID_STR_EXCEL_NOTE_COLUMNBAR]
+en-US = "chart 'series in' must match the data source. For data source in single row, set 'series in' = row. For data source in single column, set 'series in' = column"
+
+[RID_STR_EXCEL_NOTE_BORDER]
+en-US = "chart border will not appear in <PRODUCTNAME>, before import,set border to none, draw a rectangle around the border of the chart"
+
+[RID_STR_EXCEL_NOTE_AXISINTERVAL]
+en-US = " y axis interval setting will be changed in <PRODUCTNAME>. Modify axes interval setting in <PRODUCTNAME>, re-set major interval scale"
+
+[RID_STR_EXCEL_ATTRIBUTE_DATATABLE]
+en-US = "Data Table"
+
+[RID_STR_EXCEL_ATTRIBUTE_INVALIDCHARACTER]
+en-US = "Invalid Characters"
+
+[RID_STR_EXCEL_ATTRIBUTE_XAXISCATEGORY]
+en-US = "Chart Axes"
+
+[RID_STR_EXCEL_ATTRIBUTE_TIMESCALE]
+en-US = "time scale/auto"
+
+[RID_STR_EXCEL_ATTRIBUTE_UNSUPPORTEDTYPE]
+en-US = "Unsupported Chart Type"
+
+[RID_STR_EXCEL_ATTRIBUTE_TRENDLINE]
+en-US = "Trendline"
+
+[RID_STR_EXCEL_ATTRIBUTE_DATALABELWITHLEGEND]
+en-US = "Data Label With Legend"
+
+[RID_STR_EXCEL_ATTRIBUTE_LEGENDPOSITION]
+en-US = "Legend Position"
+
+[RID_STR_EXCEL_ATTRIBUTE_TITLEFONT]
+en-US = "Title Font"
+
+[RID_STR_EXCEL_ATTRIBUTE_DIFFERENT]
+en-US = "Different"
+
+[RID_STR_EXCEL_ATTRIBUTE_SERIESCHARTTYPE]
+en-US = "Multiple series chart type"
+
+[RID_STR_EXCEL_ATTRIBUTE_CHANGED]
+en-US = "changed"
+
+[RID_STR_EXCEL_ATTRIBUTE_DATASOURCE]
+en-US = "Data Source"
+
+[RID_STR_EXCEL_ATTRIBUTE_DATASOURCENOTLINKEDTOCELL]
+en-US = "Not Linked To A Cell"
+
+[RID_STR_EXCEL_ATTRIBUTE_CATEGORYANDDATA]
+en-US = "Category And Data"
+
+[RID_STR_EXCEL_ATTRIBUTE_SEPARATE]
+en-US = "Separate"
+
+[RID_STR_EXCEL_ATTRIBUTE_DATASOURCEONDIFFERENTSHEET]
+en-US = "On Different Sheet"
+
+[RID_STR_EXCEL_ATTRIBUTE_CATEGORYLABEL]
+en-US = "Category Label"
+
+[RID_STR_EXCEL_ATTRIBUTE_CATEGORYLABELMORETHANONECELL]
+en-US = "More Than One Cell"
+
+[RID_STR_EXCEL_ATTRIBUTE_COLUMNBAR]
+en-US = "Column/Bar Chart"
+
+[RID_STR_EXCEL_ATTRIBUTE_ONECOLUMNROW]
+en-US = "Data Source With Single Column/ Chart Series In Row"
+
+[RID_STR_EXCEL_ATTRIBUTE_BORDER]
+en-US = "Border"
+
+[RID_STR_EXCEL_ATTRIBUTE_AXISINTERVAL]
+en-US = "Y Axis Interval"
+
+[RID_STR_EXCEL_ATTRIBUTE_AUTO]
+en-US = "Auto"
+
+[RID_STR_EXCEL_ATTRIBUTE_CHARTNAME]
+en-US = "Chart Name"
+
+[RID_STR_EXCEL_SUBISSUE_CHART_COMPLEX]
+en-US = "Chart Issues Complex"
+
+[RID_STR_EXCEL_SUBISSUE_CHART_MINOR]
+en-US = "Chart Issues Minor"
+
+[RID_STR_EXCEL_ATTRIBUTE_NOTRIGHT]
+en-US = "not at right hand side"
+
+[RID_STR_EXCEL_ATTRIBUTE_NUMBER_OF_CELLS]
+en-US = "number cells effected"
+
+[RID_STR_PP_TRUE]
+en-US = "True"
+
+[RID_STR_PP_FALSE]
+en-US = "False"
+
+[RID_STR_PP_ISSUE_OBJECTS_GRAPHICS_AND_TEXTBOXES]
+en-US = "Objects, Graphics and Textboxes"
+
+[RID_STR_PP_SUBISSUE_COMMENT]
+en-US = "Comment"
+
+[RID_STR_PP_SUBISSUE_MOVIE]
+en-US = "Movie"
+
+[RID_STR_PP_ATTRIBUTE_CONTENT]
+en-US = "Content"
+
+[RID_STR_PP_ATTRIBUTE_LOOP]
+en-US = "Loop"
+
+[RID_STR_PP_ATTRIBUTE_PLAYONENTRY]
+en-US = "PlayOnEntry"
+
+[RID_STR_PP_ATTRIBUTE_REWIND]
+en-US = "Rewind"
+
+[RID_STR_PP_ATTRIBUTE_TYPES]
+en-US = "Types"
+
+[RID_STR_PP_ENUMERATION_VIEW_HANDOUT_MASTER]
+en-US = "View Handout Master"
+
+[RID_STR_PP_ENUMERATION_VIEW_NORMAL]
+en-US = "View Normal"
+
+[RID_STR_PP_ENUMERATION_VIEW_NOTES_MASTER]
+en-US = "View Notes Master"
+
+[RID_STR_PP_ENUMERATION_VIEW_NOTES_PAGE]
+en-US = "View Notes Page"
+
+[RID_STR_PP_ENUMERATION_VIEW_OUTLINE]
+en-US = "View Outline"
+
+[RID_STR_PP_ENUMERATION_VIEW_SLIDE]
+en-US = "View Slide"
+
+[RID_STR_PP_ENUMERATION_VIEW_SLIDE_MASTER]
+en-US = "View Slide Master"
+
+[RID_STR_PP_ENUMERATION_VIEW_SLIDE_SORTER]
+en-US = "View Slide Sorter"
+
+[RID_STR_PP_ENUMERATION_VIEW_TITLE_MASTER]
+en-US = "View Title Master"
+
+[RID_STR_PP_ENUMERATION_UNKNOWN]
+en-US = "Unknown"
+
+[RID_RESXLS_COST_Action_Settings]
+en-US = "Action Settings"
+
+[RID_RESXLS_COST_Add_custom_properties_to_document_Properties_Summary_Comments_field]
+en-US = "Add custom properties to document Properties Summary Comments field."
+
+[RID_RESXLS_COST_Additional_Weighting_Factors]
+en-US = "Additional Weighting Factors"
+
+[RID_RESXLS_COST_All_sheets__256_will_need_to_be_moved_to_a_new_workbook]
+en-US = "All sheets >256 will need to be moved to a new workbook"
+
+[RID_RESXLS_COST_Appearance]
+en-US = "Appearance"
+
+[RID_RESXLS_COST_Application]
+en-US = "Application"
+
+[RID_RESXLS_COST_AutoFilter]
+en-US = "AutoFilter"
+
+[RID_RESXLS_COST_Border_Styles]
+en-US = "Border Styles"
+
+[RID_RESXLS_COST_Cell_Attributes]
+en-US = "Cell Attributes"
+
+[RID_RESXLS_COST_CELL_SPAN_WORKAROUND]
+en-US = "Add extra row below cell. Cut and paste contents running onto 2nd page into new cell."
+
+[RID_RESXLS_COST_Cell_Spanning_Page]
+en-US = "Cell Spanning Page"
+
+[RID_RESXLS_COST_ChangesAndReviewing]
+en-US = "Changes And Reviewing"
+
+[RID_RESXLS_COST_Charts_And_Tables]
+en-US = "Charts And Tables"
+
+[RID_RESXLS_COST_Comment]
+en-US = "Comment"
+
+[RID_RESXLS_COST_Content_And_Document_Properties]
+en-US = "Content And Document Properties"
+
+[RID_RESXLS_COST_ContentAndDocumentProperties]
+en-US = "Content And Document Properties"
+
+[RID_RESXLS_COST_Controls]
+en-US = "Controls"
+
+[RID_RESXLS_COST_Cost]
+en-US = "Cost Comment"
+
+[RID_RESXLS_COST_Cost__In_simple_cases_cut_and_paste_to_new_sheet_3___5_min]
+en-US = "Cost: In simple cases cut and paste to new sheet. 3 - 5 min. May exist functions that refer to these cells. 10+"
+
+[RID_RESXLS_COST_COST_0]
+en-US = "Cost = 0. No work around."
+
+[RID_RESXLS_COST_COST_EMBED_CHART]
+en-US = "Variations in cost can range from 0 - 30 mins. Cost caused by uneven data souce, external data source, unsupported chart types, floating legend position."
+
+[RID_RESXLS_COST_COST_ERROR_TYPE]
+en-US = "Fix up cost can vary depending on the context in which this is used. Cost 3 - 5"
+
+[RID_RESXLS_COST_COST_INFO]
+en-US = "Fix up cost can vary depending on the context in which this is used. Cost 2 - 4"
+
+[RID_RESXLS_COST_COST_INVAL_PASS]
+en-US = "Cost = 0. Rerun analysis with correct password."
+
+[RID_RESXLS_COST_COST_INVALID_WORKSHEET_NAME]
+en-US = "Aufewand: Vergewissern Sie sich nach der Umbenennung, dass alle Makros mit Verweisen auf dieses Arbeitsblatt ebenfalls angepaßt werden. Der Aufwand hängt von der Zahl der Codezeilen ab, die auf den Arbeitsblattnamen verweisen."
+en-US = "Cost: When the worksheet has been renamed, ensure that all macros with a reference to the worksheet are also renamed accordingly. Cost depends on how many lines of code there are that refer to the worksheet name."
+
+[RID_RESXLS_COST_Cost_of_4_min_per_line__takes_no_account_of_complexity_of_code__number_of_comment_lines_and_so_on]
+en-US = "Cost of 4 min per line, takes no account of complexity of code, number of comment lines and so on"
+
+[RID_RESXLS_COST_Cost_per_Issue_or_Factor__min]
+en-US = "Cost per Issue or Factor (min)"
+
+[RID_RESXLS_COST_COST_PIVOT]
+en-US = "Cost = 0. Calc does not support dynamically created charts. No workaround."
+
+[RID_RESXLS_COST_COST_SHEET_CHART]
+en-US = "Variations in cost can range from 0 - 30 mins. Cost caused by uneven data souce, external data source, unsupported chart types, floating legend position."
+
+[RID_RESXLS_COST_Cost_variations_occur_because_of_the_use_of_macros_with_controls]
+en-US = "Cost variations occur because of the use of macros with controls."
+
+[RID_RESXLS_COST_COST_VBA_CONT_TYPE]
+en-US = "Cost = 0. Total number of controls better estimate - this information is useful as an indication of complexity of the Forms."
+
+[RID_RESXLS_COST_COST_VBA_CONTROLS]
+en-US = "Cost = 3 minute per control, this does not take account of issues with Frame controls or the number of these controls that have event handlers that need manually linked to migrated code."
+
+[RID_RESXLS_COST_COST_VBA_FORMS]
+en-US = "Cost = 0. Using total number of controls on forms as better estimate"
+
+[RID_RESXLS_COST_COST_VBA_LOC]
+en-US = "Cost of 4 min per line, takes no account of complexity of code, number of comment lines and so on"
+
+[RID_RESXLS_COST_COST_VBA_PROPS]
+en-US = "Cost = 0 using lines of code as better cost estimate."
+
+[RID_RESXLS_COST_Costs__min]
+en-US = "Costs (min)"
+
+[RID_RESXLS_COST_Custom_Bullet_List]
+en-US = "Custom Bullet List"
+
+[RID_RESXLS_COST_Document_Custom_Properties]
+en-US = "Document Custom Properties"
+
+[RID_RESXLS_COST_Document_Parts_Protection]
+en-US = "Document Parts Protection"
+
+[RID_RESXLS_COST_Embedded_Chart]
+en-US = "Chart Issues Minor"
+
+[RID_RESXLS_COST_embedded_objects]
+en-US = "Cost = 0. Most embedded objects come across. If one does not then this may require some reenginering and is not in the scope of an automated cost calculation."
+
+[RID_RESXLS_COST_Embedded_OLE_Object]
+en-US = "Embedded OLE Object"
+
+[RID_RESXLS_COST_Excel]
+en-US = "Excel"
+
+[RID_RESXLS_COST_Excel_Totals]
+en-US = "Excel Totals"
+
+[RID_RESXLS_COST_External]
+en-US = "External"
+
+[RID_RESXLS_COST_External_References_In_Macro___Module__Class_or_UserForm]
+en-US = "External References In Macro - Module, Class or UserForm"
+
+[RID_RESXLS_COST_Factor_Count]
+en-US = "Factor Count"
+
+[RID_RESXLS_COST_Fields]
+en-US = "Fields"
+
+[RID_RESXLS_COST_Filters]
+en-US = "Filters"
+
+[RID_RESXLS_COST_Fixed_SO7]
+en-US = "Fixed <PRODUCTNAME> <PRODUCTVERSION>"
+
+[RID_RESXLS_COST_Form_Field]
+en-US = "Form Field"
+
+[RID_RESXLS_COST_Format]
+en-US = "Format"
+
+[RID_RESXLS_COST_Functions]
+en-US = "Functions"
+
+[RID_RESXLS_COST_Zoom]
+en-US = "Zoom"
+
+[RID_RESXLS_COST_HEADERFOOTER_WORKAROUND]
+en-US = "Insert carriage returns to resize header/ footer to the size of the graphic."
+
+[RID_RESXLS_COST_Hours_Per_MD]
+en-US = "Hours Per MD ="
+
+[RID_RESXLS_COST_Indexes_And_References]
+en-US = "Indexes And References"
+
+[RID_RESXLS_COST_Invalid_Password_Entered]
+en-US = "Invalid Password Entered"
+
+[RID_RESXLS_COST_Invalid_Worksheet_Name]
+en-US = "Invalid Worksheet Name"
+
+[RID_RESXLS_COST_Issue__18_of_the_24_table_border_styles_do_not_display_correctly]
+en-US = "Issue: 18 of the 24 table border styles do not display correctly."
+
+[RID_RESXLS_COST_Issue__256_sheet_limit_exceeded]
+en-US = "Issue: 256 sheet limit exceeded."
+
+[RID_RESXLS_COST_Issue__32000_row_limit_exceeded]
+en-US = "Issue: 32000 row limit exceeded."
+
+[RID_RESXLS_COST_Issue__A_worksheet_in_the_workbook_has_a_name_with_invalid_characters]
+en-US = "Issue: A worksheet in the workbook has a name with invalid characters."
+
+[RID_RESXLS_COST_Issue__AutoFilter_does_not_function_properly]
+en-US = "Issue: AutoFilter does not function properly."
+
+[RID_RESXLS_COST_Issue__Calls_to_windows_API_functions_are_windows_specific]
+en-US = "Issue: Calls to windows API functions are windows specific."
+
+[RID_RESXLS_COST_Issue__Chart_support_is_limited_in_SO7]
+en-US = "Issue: Chart support is limited in <PRODUCTNAME>."
+
+[RID_RESXLS_COST_Issue__Comments_are_lost_on_migration_to_SO7]
+en-US = "Issue: Comments are lost on migration to <PRODUCTNAME>."
+
+[RID_RESXLS_COST_Issue__Custom_Properties_are_lost_on_migration]
+en-US = "Issue: Custom Properties are lost on migration"
+
+[RID_RESXLS_COST_Issue__Document_is_password_protected_and_cannot_be_opened_by_SO]
+en-US = "Issue: Document is password protected and cannot be opened by SO."
+
+[RID_RESXLS_COST_Issue__External_functions_not_supported_by_SO7]
+en-US = "Issue: External functions not supported by <PRODUCTNAME>"
+
+[RID_RESXLS_COST_Issue__External_references_are_windows_specific]
+en-US = "Issue: External references are windows specific."
+
+[RID_RESXLS_COST_Issue__Fields_are_imported_but_need_to_have_the_link_to_datasource_reset]
+en-US = "Issue: Fields are imported but need to have the link to data source reset."
+
+[RID_RESXLS_COST_Issue__Graphics___frames_in_header_footer_tend_to_be_misplaced]
+en-US = "Issue: Graphics & frames in header footer tend to be misplaced."
+
+[RID_RESXLS_COST_Issue__Incorrect_password_entered]
+en-US = "Issue: Incorrect password entered. "
+
+[RID_RESXLS_COST_Issue__Information_relating_to_the_data_source_is_lost_in_migration]
+en-US = "Issue: Information relating to the data source is lost in migration."
+
+[RID_RESXLS_COST_Issue__Invalid_password_entered_Rerun_analysis]
+en-US = "Issue: Invalid password entered. Rerun analysis."
+
+[RID_RESXLS_COST_Issue__Lost_during_migration_No_StarOffice_equivalent]
+en-US = "Issue: Lost during migration. No <PRODUCTNAME> equivalent."
+
+[RID_RESXLS_COST_Issue__Macros_from_old_workbook_versions_do_not_import_into_SO7]
+en-US = "Issue: Macros from old workbook versions do not import into SO9."
+
+[RID_RESXLS_COST_Issue__Modules_will_need_porting_to_StarOffice_Basic]
+en-US = "Issue: Modules will need porting to <PRODUCTNAME> Basic."
+
+[RID_RESXLS_COST_Issue__Most_migrate_ok_but_do_not_roundtrip]
+en-US = "Issue: Most migrate ok but do not roundtrip."
+
+[RID_RESXLS_COST_Issue__Movies_are_not_supported_by_SO7]
+en-US = "Issue: Movies are not supported by <PRODUCTNAME>."
+
+[RID_RESXLS_COST_Issue__Need_to_set_these_to_be_included_in_TOC_in_SO7]
+en-US = "Issue: Need to set these to be included in TOC in <PRODUCTNAME>"
+
+[RID_RESXLS_COST_Issue__Password_protection_of_comments__tracked_changes_and_forms_is_lost]
+en-US = "Issue: Password protection of comments, tracked changes and forms is lost."
+
+[RID_RESXLS_COST_Issue__Pivot_charts_are_not_supported_by_SO7]
+en-US = "Issue: Pivot charts are not supported by <PRODUCTNAME>."
+
+[RID_RESXLS_COST_Issue__Presents_a_cross_platform_interoperability_issue]
+en-US = "Issue: Presents a cross platform interoperability issue."
+
+[RID_RESXLS_COST_Issue__Print_wide_pages_not_supported]
+en-US = "Issue: Print wide pages not supported."
+
+[RID_RESXLS_COST_Issue__Shading_can_be_applied_to_fields_and_to_controls_separately_in_Word]
+en-US = "Issue: Shading can be applied to fields and to controls separately in Word. <PRODUCTNAME> does not differentiate between controls and fields so shading can look different in Writer."
+
+[RID_RESXLS_COST_Issue__Table_imported_as_text_as_no_StarOffice_equivalent]
+en-US = "Issue: Table imported as text as no <PRODUCTNAME> equivalent."
+
+[RID_RESXLS_COST_Issue__Tables_nested_in_tables_are_not_supported_by_SO7]
+en-US = "Issue: Tables nested in tables are not supported by <PRODUCTNAME>."
+
+[RID_RESXLS_COST_Issue__Tabs_are_incorrect_after_migration]
+en-US = "Issue: Tabs are incorrect after migration. Certain format types do not migrate to <PRODUCTNAME>."
+
+[RID_RESXLS_COST_Issue__Text_form_fields_roundtrip_as_Fill_In_field]
+en-US = "Issue: Text form fields roundtrip as Fill In field. Field attributes are lost."
+
+[RID_RESXLS_COST_Issue__Unsupported_formatting_set]
+en-US = "Issue: Unsupported formatting set."
+
+[RID_RESXLS_COST_Issue__Unsupported_function_type]
+en-US = "Issue: Unsupported function type. "
+
+[RID_RESXLS_COST_Issue__Userform_controls_will_need_porting_to_StarOffice_Basic]
+en-US = "Issue: Userform controls will need porting to <PRODUCTNAME> Basic."
+
+[RID_RESXLS_COST_Issue__Userforms_controls_will_need_porting_to_StarOffice_Basic]
+en-US = "Issue: Userform controls will need porting to <PRODUCTNAME> Basic."
+
+[RID_RESXLS_COST_Issue__Userforms_will_need_porting_to_StarOffice_Basic]
+en-US = "Issue: Userforms will need porting to <PRODUCTNAME> Basic."
+
+[RID_RESXLS_COST_Issue__VBProject_is_password_protected_Remove_password__rerun_analysis]
+en-US = "Issue: VBProject is password protected. Remove password, rerun analysis."
+
+[RID_RESXLS_COST_Issue__Will_need_refreshing_in_SO7_External_datasources_and_functions_are_not_supported]
+en-US = "Issue: Will need refreshing in <PRODUCTNAME>. External data sources and functions are not supported"
+
+[RID_RESXLS_COST_Issue__Workbook_protection_is_not_supported]
+en-US = "Issue: Workbook protection is not supported"
+
+[RID_RESXLS_COST_Issue__Writer_cannot_correctly_display_cells_spanning_more_than_1_page]
+en-US = "Issue: Writer cannot correctly display cells spanning more than 1 page."
+
+[RID_RESXLS_COST_Issue_Category]
+en-US = "Issue Category"
+
+[RID_RESXLS_COST_Issue_Count]
+en-US = " Issue Count"
+
+[RID_RESXLS_COST_Issue_Type]
+en-US = "Issue Type"
+
+[RID_RESXLS_COST_Linked_OLE_Object]
+en-US = "Linked OLE Object"
+
+[RID_RESXLS_COST_Mail_Merge_Datasource]
+en-US = "Mail Merge Data Source"
+
+[RID_RESXLS_COST_Mail_Merge_Field]
+en-US = "Mail Merge Field"
+
+[RID_RESXLS_COST_Major_Issue]
+en-US = "Complex Issue"
+
+[RID_RESXLS_COST_MAX_SHEETS_WORKAROUND]
+en-US = "Need to move sheets to new workbook. "
+
+[RID_RESXLS_COST_Maximum_Rows_Exceeded]
+en-US = "Maximum Rows Exceeded"
+
+[RID_RESXLS_COST_Maximum_Sheets_Exceeded]
+en-US = "Maximum Sheets Exceeded"
+
+[RID_RESXLS_COST_Migration_Issues_Costs]
+en-US = "Migration Issues Analyzed"
+
+[RID_RESXLS_COST_Movie]
+en-US = "Movie"
+
+[RID_RESXLS_COST_NESTED_TABLE_WORKAROUND]
+en-US = "In word use split cell to create similar layout."
+
+[RID_RESXLS_COST_Nested_Tables]
+en-US = "Nested Tables"
+
+[RID_RESXLS_COST_Not_Planned]
+en-US = "Not Planned"
+
+[RID_RESXLS_COST_Notes_And_Handouts]
+en-US = "Notes And Handouts"
+
+[RID_RESXLS_COST_Number_Of_External_References]
+en-US = "Number Of External References"
+
+[RID_RESXLS_COST_Number_Of_Lines]
+en-US = "Number Of Lines"
+
+[RID_RESXLS_COST_Number_of_Lines_in_Unique_Modules]
+en-US = "Number of Lines in Unique Code Modules"
+
+[RID_RESXLS_COST_Number_of_Modules]
+en-US = "Number of Modules"
+
+[RID_RESXLS_COST_Number_of_Unique_Modules]
+en-US = "Number of Unique Code Modules"
+
+[RID_RESXLS_COST_Numbering_Reference]
+en-US = "Numbering Reference"
+
+[RID_RESXLS_COST_Numbering_Reference_Comment]
+en-US = "Issue: <PRODUCTNAME> can not import references that refer in a numbered list."
+
+[RID_RESXLS_COST_Object_In_Header_Footer]
+en-US = "Object In Header Footer"
+
+[RID_RESXLS_COST_Objects_And_Graphics]
+en-US = "Objects And Graphics"
+
+[RID_RESXLS_COST_Objects_Graphics_And_Frames]
+en-US = "Objects Graphics And Frames"
+
+[RID_RESXLS_COST_Objects_Graphics_And_Textboxes]
+en-US = "Objects Graphics And Textboxes"
+
+[RID_RESXLS_COST_Old_Workbook_Version]
+en-US = "Old Workbook Version"
+
+[RID_RESXLS_COST_OLE_Control]
+en-US = "OLE Control"
+
+[RID_RESXLS_COST_OLECONTR_COST]
+en-US = "Cost variations occur because of the use of macros with controls."
+
+[RID_RESXLS_COST_Page_Setup]
+en-US = "Page Setup"
+
+[RID_RESXLS_COST_Password_Protected]
+en-US = "Password Protected"
+
+[RID_RESXLS_COST_Password_Protection]
+en-US = "Password Protection"
+
+[RID_RESXLS_COST_Pivot]
+en-US = "Pivot Chart"
+
+[RID_RESXLS_COST_Planned_SO8]
+en-US = "Planned"
+
+[RID_RESXLS_COST_Portability]
+en-US = "Portability"
+
+[RID_RESXLS_COST_PowerPoint]
+en-US = "PowerPoint"
+
+[RID_RESXLS_COST_PowerPoint_Totals]
+en-US = "PowerPoint Totals"
+
+[RID_RESXLS_COST_Prepared_Issue_Count]
+en-US = "Prepared Issue Count"
+
+[RID_RESXLS_COST_Prepared_Savings__min]
+en-US = "Prepared Savings (min)"
+
+[RID_RESXLS_COST_Properties___Module__Class_or_UserForm]
+en-US = "Properties - Module, Class or UserForm"
+
+[RID_RESXLS_COST_Remove_password_to_open]
+en-US = "Remove password to open."
+
+[RID_RESXLS_COST_Remove_the_invalid_characters_from_the_worksheet_name]
+en-US = "Remove the invalid characters from the worksheet name."
+
+[RID_RESXLS_COST_Rerun_analysis_with_correct_password]
+en-US = "Rerun analysis with correct password."
+
+[RID_RESXLS_COST_Reset_link_to_Data_Base_having_setup_a_Datasource_in_SO7]
+en-US = "Reset link to database having setup a data source in <PRODUCTNAME>."
+
+[RID_RESXLS_COST_set_cost_factor_if_the_macro_has_to_be_ported_off_Windows]
+en-US = "Cost = 0. Set a cost factor if the macro has to be ported off Windows. "
+
+[RID_RESXLS_COST_Save_workbook_as_a_new_workbook_version]
+en-US = "Save workbook as a new workbook version."
+
+[RID_RESXLS_COST_Setup_Datasource_in_SO7_using_Tools__Datasource]
+en-US = "Setup data source in <PRODUCTNAME> using Tools/Data source"
+
+[RID_RESXLS_COST_Sheet_Chart]
+en-US = "Chart Issues Complex"
+
+[RID_RESXLS_COST_Status]
+en-US = "Status"
+
+[RID_RESXLS_COST_Table_Of_Authorities]
+en-US = "Table Of Authorities"
+
+[RID_RESXLS_COST_Table_Of_Authorities_Field]
+en-US = "Table Of Authorities Field"
+
+[RID_RESXLS_COST_Table_Of_Contents]
+en-US = "Table Of Contents"
+
+[RID_RESXLS_COST_Tables]
+en-US = "Tables"
+
+[RID_RESXLS_COST_TOC_ISSUE_WORKAROUND]
+en-US = "Tab Issues: use fancy format. Numbering incorrect: remove blank lines with heading style used by TOC. Numbering abuts Header: replace leading tabs in Header style used in TOC with spaces."
+
+[RID_RESXLS_COST_Total_Cost___MD]
+en-US = "Total Cost (MD) = "
+
+[RID_RESXLS_COST_User_Error]
+en-US = "User Error"
+
+[RID_RESXLS_COST_User_Forms_Control_Count]
+en-US = "User Forms Control Count"
+
+[RID_RESXLS_COST_User_Forms_Control_Type_Count]
+en-US = "User Forms Control Type Count"
+
+[RID_RESXLS_COST_User_Forms_Count]
+en-US = "User Forms Count"
+
+[RID_RESXLS_COST_VBA_Macros]
+en-US = "VBA Macros"
+
+[RID_RESXLS_COST_Word]
+en-US = "Word"
+
+[RID_RESXLS_COST_Word_Totals]
+en-US = "Word Totals"
+
+[RID_RESXLS_COST_Work_Around]
+en-US = "Work Around"
+
+[RID_RESXLS_COST_Workaround_Remove_protection_before_importing]
+en-US = "Remove protection before importing"
+
+[RID_RESXLS_COST_WorkbookProtection]
+en-US = "WorkbookProtection "
+
+[RID_RESXLS_DP_Accessed]
+en-US = "Accessed"
+
+[RID_RESXLS_DP_All_Analysed_Documents___Properties]
+en-US = "All Analysed Documents - properties"
+
+[RID_RESXLS_DP_Application]
+en-US = "Application"
+
+[RID_RESXLS_DP_Based_on_Template]
+en-US = "Based on Template"
+
+[RID_RESXLS_DP_Costs]
+en-US = "Costs"
+
+[RID_RESXLS_DP_Created]
+en-US = "Created"
+
+[RID_RESXLS_DP_Document_Details]
+en-US = "Document Details"
+
+[RID_RESXLS_DP_Document_Issue_Costs]
+en-US = "Document Migration Costs (min)"
+
+[RID_RESXLS_DP_Document_Migration_Issues]
+en-US = "Document Migration Issues"
+
+[RID_RESXLS_DP_Document_Name]
+en-US = "Document Name"
+
+[RID_RESXLS_DP_Document_Name_and_Path]
+en-US = "Document Name and Path"
+
+[RID_RESXLS_DP_Issues_Complex_count]
+en-US = "Issues Complex Count"
+
+[RID_RESXLS_DP_Last_Saved_By]
+en-US = "Last Saved By"
+
+[RID_RESXLS_DP_Lines_of_Macro_Code]
+en-US = "Lines of Macro Code"
+
+[RID_RESXLS_DP_Macro_Issues]
+en-US = "Macro Migration Issues"
+
+[RID_RESXLS_DP_Macro_Migration_Costs]
+en-US = "Macro Migration Costs (min)"
+
+[RID_RESXLS_DP_Macro_Migration_Issues]
+en-US = "Macro Migration Issues"
+
+[RID_RESXLS_DP_Migration_Issues]
+en-US = "Document Migration Issues"
+
+[RID_RESXLS_DP_Minor_Issues]
+en-US = "Issues Minor Count"
+
+[RID_RESXLS_DP_Modified]
+en-US = "Modified"
+
+[RID_RESXLS_DP_Pages_Sheets_Slides]
+en-US = "Pages, Sheets or Slides Count"
+
+[RID_RESXLS_DP_Prepareable_Issues_Costs]
+en-US = "Prepareable Issues Savings (min)"
+
+[RID_RESXLS_DP_Prepared_Issues]
+en-US = "Prepareable Document Issues"
+
+[RID_RESXLS_DP_Printed]
+en-US = "Printed"
+
+[RID_RESXLS_DP_Revision]
+en-US = "Revision"
+
+[RID_RESXLS_DP_User_Form_Count]
+en-US = "User Form Count"
+
+[RID_RESXLS_ID_All_Documents_with_Issues___Issue_Details]
+en-US = "All Documents with Issues - Issue Details"
+
+[RID_RESXLS_ID_Application]
+en-US = "Application"
+
+[RID_RESXLS_ID_Column__Left]
+en-US = "Column/ Left"
+
+[RID_RESXLS_ID_Document_Name]
+en-US = "Document Name"
+
+[RID_RESXLS_ID_Document_Name_and_Path]
+en-US = "Document Name and Path"
+
+[RID_RESXLS_ID_Issue_Category]
+en-US = "Issue Category"
+
+[RID_RESXLS_ID_Issue_Details]
+en-US = "Issue Details"
+
+[RID_RESXLS_ID_Issue_Type]
+en-US = "Issue Type"
+
+[RID_RESXLS_ID_Line__Row__Top]
+en-US = "Line/ Row/ Top"
+
+[RID_RESXLS_ID_Location]
+en-US = "Location"
+
+[RID_RESXLS_ID_Location_Type]
+en-US = "Location Type"
+
+[RID_RESXLS_OV_3_to_6_months]
+en-US = "3 - 6 months"
+
+[RID_RESXLS_OV_6_to_12_months]
+en-US = "6 - 12 months"
+
+[RID_RESXLS_OV_Complex]
+en-US = "Complex"
+
+[RID_RESXLS_OV_Cost_estimates_for_migration]
+en-US = "Cost estimates for migration of all analyzed documents"
+
+[RID_RESXLS_OV_Costs]
+en-US = "Costs (MD)"
+
+[RID_RESXLS_OV_Docs_with_DocumentMigrationIssues]
+en-US = "Documents with Document Migration Issues (excludes macro issues)"
+
+[RID_RESXLS_OV_Document_Migration_Costs]
+en-US = "Document Migration Costs<CR>( costs based on: issues listed in Issues Analyzed, excludes macros issues )"
+
+[RID_RESXLS_OV_Document_Modification_Dates]
+en-US = "Document Modification Dates"
+
+[RID_RESXLS_OV_Document_Type]
+en-US = "Type"
+
+[RID_RESXLS_OV_Documents_with_Macro_Migration_Issues]
+en-US = "Documents with Macro Migration Issues"
+
+[RID_RESXLS_OV_Excel]
+en-US = "Excel"
+
+[RID_RESXLS_OV_Excel_Costs]
+en-US = "Excel "
+
+[RID_RESXLS_OV_Excel_Spreadsheet]
+en-US = " Spreadsheets (.xls)"
+
+[RID_RESXLS_OV_Excel_Template]
+en-US = " Templates (.xlt)"
+
+[RID_RESXLS_OV_GREATER_THAN_1_year]
+en-US = "> 1 year"
+
+[RID_RESXLS_OV_Last_Modified]
+en-US = "Last Modified"
+
+[RID_RESXLS_OV_LESS_3_months]
+en-US = "< 3 months"
+
+[RID_RESXLS_OV_LESS_THAN3MONTHS]
+en-US = "Templates (.dot)"
+
+[RID_RESXLS_OV_Macro_Migration_Costs]
+en-US = "Manual Macro Migration Costs<CR>( costs based on: number of lines in unique code modules and number of user form controls )"
+
+[RID_RESXLS_OV_Medium]
+en-US = "Medium"
+
+[RID_RESXLS_OV_Minor]
+en-US = "Minor"
+
+[RID_RESXLS_OV_None]
+en-US = "None"
+
+[RID_RESXLS_OV_Number]
+en-US = "Number"
+
+[RID_RESXLS_OV_Number_of_Documents_Analyzed]
+en-US = "Number of Documents Analyzed"
+
+[RID_RESXLS_OV_NumberOfDocs]
+en-US = "Number of docs"
+
+[RID_RESXLS_OV_Potential_savings_macro_conversion]
+en-US = "Potential Savings with Automated Macro Migration of 20 to 60%"
+
+[RID_RESXLS_OV_Potential_savings_prepared_docs]
+en-US = "Potential Savings with Automated Preparation"
+
+[RID_RESXLS_OV_PowerPoint]
+en-US = "PowerPoint"
+
+[RID_RESXLS_OV_PowerPoint_Costs]
+en-US = "PowerPoint "
+
+[RID_RESXLS_OV_PowerPoint_Document]
+en-US = " Presentations (.ppt)"
+
+[RID_RESXLS_OV_PowerPoint_Template]
+en-US = " Templates (.pot)"
+
+[RID_RESXLS_OV_Simple]
+en-US = "Simple"
+
+[RID_RESXLS_OV_Total]
+en-US = "Total"
+
+[RID_RESXLS_OV_Totals]
+en-US = "Totals"
+
+[RID_RESXLS_OV_Word]
+en-US = "Word"
+
+[RID_RESXLS_OV_Word_Costs]
+en-US = "Word "
+
+[RID_RESXLS_OV_Word_Document]
+en-US = "Documents (.doc)"
+
+[RID_RESXLS_OV_Word_Template]
+en-US = "Templates (.dot)"
+
+[RID_RESXLS_PP_Action_Settings]
+en-US = "Action Settings"
+
+[RID_RESXLS_PP_Application]
+en-US = "Application"
+
+[RID_RESXLS_PP_Content___Document_Properties]
+en-US = "Content & Document Properties"
+
+[RID_RESXLS_PP_Document_Name_and_Path]
+en-US = "Document Name and Path"
+
+[RID_RESXLS_PP_Fields]
+en-US = "Fields"
+
+[RID_RESXLS_PP_Format]
+en-US = "Format"
+
+[RID_RESXLS_PP_Notes___Handouts]
+en-US = "Notes & Handouts"
+
+[RID_RESXLS_PP_Objects__Graphics___Textboxes]
+en-US = "Objects, Graphics & Textboxes"
+
+[RID_RESXLS_PP_Portability]
+en-US = "Portability"
+
+[RID_RESXLS_PP_PowerPoint_Documents_with_Issues___Issue_Summary]
+en-US = "PowerPoint Documents with Issues - Issue Summary"
+
+[RID_RESXLS_PP_PowerPoint_Presentation_Name]
+en-US = "PowerPoint Presentation Name"
+
+[RID_RESXLS_PP_VBA_Macros]
+en-US = "VBA Macros"
+
+[RID_RESXLS_RD_All_Documents_with_Macros___Reference_Details]
+en-US = "All Documents with Macros - Reference Details"
+
+[RID_RESXLS_RD_Application]
+en-US = "Application"
+
+[RID_RESXLS_RD_Description]
+en-US = "Description"
+
+[RID_RESXLS_RD_Document_Name]
+en-US = "Document Name"
+
+[RID_RESXLS_RD_Document_Name_and_Path]
+en-US = "Document Name and Path"
+
+[RID_RESXLS_RD_Location]
+en-US = "Location"
+
+[RID_RESXLS_RD_Reference]
+en-US = "Reference"
+
+[RID_RESXLS_RD_Reference_Details]
+en-US = "Reference Details"
+
+[RID_RESXLS_WI_Application]
+en-US = "Application"
+
+[RID_RESXLS_WI_Changes_and_Reviewing]
+en-US = "Changes and Reviewing"
+
+[RID_RESXLS_WI_Content___Document_Properties]
+en-US = "Content & Document Properties"
+
+[RID_RESXLS_WI_Controls]
+en-US = "Controls"
+
+[RID_RESXLS_WI_Document_Name_and_Path]
+en-US = "Document Name and Path"
+
+[RID_RESXLS_WI_Fields]
+en-US = "Fields"
+
+[RID_RESXLS_WI_Format]
+en-US = "Format"
+
+[RID_RESXLS_WI_Index_and_References]
+en-US = "Index and References"
+
+[RID_RESXLS_WI_Objects__Graphics____Frames]
+en-US = "Objects, Graphics & Frames"
+
+[RID_RESXLS_WI_Portability]
+en-US = "Portability"
+
+[RID_RESXLS_WI_Tables]
+en-US = "Tables"
+
+[RID_RESXLS_WI_VBA_Macros]
+en-US = "VBA Macros"
+
+[RID_RESXLS_WI_Word_Document_Name]
+en-US = "Word Document Name"
+
+[RID_RESXLS_WI_Word_Documents_with_Issues___Issue_Summary]
+en-US = "Word Documents with Issues - Issue Summary"
+
+[RID_RESXLS_XL_Application]
+en-US = "Application"
+
+[RID_RESXLS_XL_Changes___Reviewing]
+en-US = "Changes & Reviewing"
+
+[RID_RESXLS_XL_Charts___Tables]
+en-US = "Charts & Tables"
+
+[RID_RESXLS_XL_Excel_Documents_with_Issues___Issue_Summary]
+en-US = "Excel Documents with Issues - Issue Summary"
+
+[RID_RESXLS_XL_Excel_Spreadsheet_Name]
+en-US = "Excel Spreadsheet Name"
+
+[RID_RESXLS_XL_Filters]
+en-US = "Filters"
+
+[RID_RESXLS_XL_Format]
+en-US = "Format"
+
+[RID_RESXLS_XL_Functions]
+en-US = "Functions"
+
+[RID_RESXLS_XL_Objects___Graphics]
+en-US = "Objects & Graphics"
+
+[RID_STR_DVR_XL_EXCEL_DRIVER]
+en-US = "Excel Driver"
+
+[RID_STR_DVR_XL_ISSUES]
+en-US = "2. Issues"
+
+[RID_STR_DVR_XL_PURPOSE]
+en-US = "1. Purpose"
+
+[RID_STR_DVR_XL_READ_README]
+en-US = "If there are any problems running the Wizard please refer to the Readme.doc"
+
+[RID_STR_DVR_XL_THE_MACROS]
+en-US = "The macros in this document are used by the Analysis Wizard to analyze the collection of Excel documents you specify using the Wizard. It should not be modified in any way, the Wizard will open and close it as required by the tool."
+
+[RID_STR_DVR_XL_THIS_DOC]
+en-US = "This document contains VBA macros which collect and analyse Excel documents for known issues when importing into <PRODUCTNAME>"
+
+[RID_STR_DVR_XL_TITLE]
+en-US = "<PRODUCTNAME> Migration Analysis - Excel Driver"
+
+[RID_STR_DVR_PP_TXT2]
+en-US = "This document contains VBA macros which collect and analyse PowerPoint documents for known issues when importing into <PRODUCTNAME>"
+
+[RID_STR_DVR_PP_TXT3]
+en-US = "<PRODUCTNAME> Migration Analysis - PowerPoint Driver"
+
+[RID_STR_DVR_PP_TXT4]
+en-US = "PowerPoint Driver"
+
+[RID_STR_DVR_PP_TXT5]
+en-US = "Purpose"
+
+[RID_STR_DVR_PP_TXT6]
+en-US = "The macros in this document are used by the Analysis Wizard to analyze the collection of PowerPoint documents you specify using the Wizard. It should not be modified in any way, the Wizard will open and close it as required by the tool."
+
+[RID_STR_DVR_PP_TXT7]
+en-US = "Issues"
+
+[RID_STR_DVR_PP_TXT8]
+en-US = "If there are any problems running the Wizard please refer to the Readme.doc"
+
+[RID_STR_WDVR_SOANA]
+en-US = "<PRODUCTNAME> MIGRATION ANALYSIS - WORD DRIVER"
+
+[RID_STR_WDVR_INTRO]
+en-US = "This document contains VBA macros, which collect and analyse Word documents for known issues when importing into <PRODUCTNAME>"
+
+[RID_STR_WDVR_TITLE]
+en-US = "Word Driver"
+
+[RID_STR_WDVR_PURPO]
+en-US = "Purpose"
+
+[RID_STR_WDVR_PARA1]
+en-US = "The macros in this document are used by the Analysis Wizard to analyze the collection of Word documents you specify using the Wizard. It should not be modified in any way, the Wizard will open and close it as required by the tool."
+
+[RID_STR_WDVR_ISSUE]
+en-US = "Issues"
+
+[RID_STR_WDVR_PARA2]
+en-US = "If there are any problems running the Wizard please refer to the Readme.doc"
+
+[RID_STR_WORD_ATTRIBUTE_ALLOW_ONLY_COMMENTS]
+en-US = "Allow Only Comments"
+
+[RID_STR_WORD_ATTRIBUTE_ALLOW_ONLY_FORM_FIELDS]
+en-US = "Allow Only FormFields"
+
+[RID_STR_WORD_ATTRIBUTE_ALLOW_ONLY_REVISIONS]
+en-US = "Allow Only Revisions"
+
+[RID_STR_WORD_ATTRIBUTE_AUTHOR]
+en-US = "Author"
+
+[RID_STR_WORD_ATTRIBUTE_DATASOURCE]
+en-US = "Datasource"
+
+[RID_STR_WORD_ATTRIBUTE_FIELD_TEXT]
+en-US = "Field Text"
+
+[RID_STR_WORD_ATTRIBUTE_FORM_FIELD_AUTOSIZE]
+en-US = "Autosize"
+
+[RID_STR_WORD_ATTRIBUTE_FORM_FIELD_ENTRY_MACRO]
+en-US = "Entry macro"
+
+[RID_STR_WORD_ATTRIBUTE_FORM_FIELD_EXIT_MACRO]
+en-US = "Exit macro"
+
+[RID_STR_WORD_ATTRIBUTE_FORM_FIELD_FILLIN_ENABLED]
+en-US = "Fill-in enabled"
+
+[RID_STR_WORD_ATTRIBUTE_FORM_FIELD_GREYED]
+en-US = "FormFields Greyed"
+
+[RID_STR_WORD_ATTRIBUTE_FORM_FIELD_HELP_KEY_F1_AUTO_TEXT]
+en-US = "Help Key(F1) [Auto Text]"
+
+[RID_STR_WORD_ATTRIBUTE_FORM_FIELD_HELP_KEY_F1_OWN_TEXT]
+en-US = "Help Key(F1) [Own Text]"
+
+[RID_STR_WORD_ATTRIBUTE_FORM_FIELD_LOCKED]
+en-US = "Locked"
+
+[RID_STR_WORD_ATTRIBUTE_FORM_FIELD_MAX_LENGTH]
+en-US = "Maximum Length"
+
+[RID_STR_WORD_ATTRIBUTE_FORM_FIELD_STATUS_BAR_HELP_AUTO_TEXT]
+en-US = "Status Bar Help [Auto Text]"
+
+[RID_STR_WORD_ATTRIBUTE_FORM_FIELD_STATUS_BAR_HELP_OWN_TEXT]
+en-US = "Status Bar Help [Own Text]"
+
+[RID_STR_WORD_ATTRIBUTE_FORM_FIELD_TEXT_FORM_FIELD_TYPE]
+en-US = "Text Form Field Type"
+
+[RID_STR_WORD_ATTRIBUTE_FOOTER]
+en-US = "Footer"
+
+[RID_STR_WORD_ATTRIBUTE_HEADER]
+en-US = "Header"
+
+[RID_STR_WORD_ATTRIBUTE_FRAME]
+en-US = "Frame"
+
+[RID_STR_WORD_ATTRIBUTE_GRAPHIC]
+en-US = "Graphic"
+
+[RID_STR_WORD_ATTRIBUTE_OBJECT_HEIGHT_GT_H]
+en-US = "Height Greater Than Header Height"
+
+[RID_STR_WORD_ATTRIBUTE_OBJECT_HEIGHT_GT_F]
+en-US = "Height Greater Than Footer Height"
+
+[RID_STR_WORD_ATTRIBUTE_NUM_OF_GRAPHIC]
+en-US = "Number of Graphics"
+
+[RID_STR_WORD_ATTRIBUTE_OBJECT_LOCATED_BELOW_HEADER]
+en-US = "Located Below Header"
+
+[RID_STR_WORD_ATTRIBUTE_NUM_OF_FRAME]
+en-US = "Number of Frames"
+
+[RID_STR_WORD_ATTRIBUTE_HEADER_EVEN_PAGES]
+en-US = "Even Page(s)"
+
+[RID_STR_WORD_ATTRIBUTE_HEADER_FIRST_PAGE]
+en-US = "First Page"
+
+[RID_STR_WORD_ATTRIBUTE_HEADER_ODD_PAGES]
+en-US = "Odd Page(s)"
+
+[RID_STR_WORD_ATTRIBUTE_HEADER_PAGE_DEFAULT]
+en-US = "Page Default"
+
+[RID_STR_WORD_ATTRIBUTE_GRAPHICTYPE]
+en-US = "Graphic Type"
+
+[RID_STR_WORD_ATTRIBUTE_INLINESHAPE]
+en-US = "Inline Shape"
+
+[RID_STR_WORD_ATTRIBUTE_INNER_TABLE]
+en-US = "InnerTable"
+
+[RID_STR_WORD_ATTRIBUTE_LEADER]
+en-US = "Leader"
+
+[RID_STR_WORD_ATTRIBUTE_LINK]
+en-US = "Link"
+
+[RID_STR_WORD_ATTRIBUTE_LOCATION]
+en-US = "Location"
+
+[RID_STR_WORD_ATTRIBUTE_NUMBER_CUSTOM_PARAGRAPHS]
+en-US = "Number of custom paragraphs"
+
+[RID_STR_WORD_ATTRIBUTE_OUTER_TABLE]
+en-US = "Outer Table"
+
+[RID_STR_WORD_ATTRIBUTE_PASSWORD_TO_MODIFY]
+en-US = "Password to Modify"
+
+[RID_STR_WORD_ATTRIBUTE_PASSWORD_TO_OPEN]
+en-US = "Password to Open"
+
+[RID_STR_WORD_ATTRIBUTE_PROTECTION]
+en-US = "Protection"
+
+[RID_STR_WORD_ATTRIBUTE_SET]
+en-US = "Set"
+
+[RID_STR_WORD_ATTRIBUTE_START_COL]
+en-US = "Start Column"
+
+[RID_STR_WORD_ATTRIBUTE_START_ROW]
+en-US = "Start Row"
+
+[RID_STR_WORD_ATTRIBUTE_TEXT]
+en-US = "Text"
+
+[RID_STR_WORD_ATTRIBUTE_TOC_FORMAT_ISSUE]
+en-US = "Potential problem with TOC Format matching Modern style"
+
+[RID_STR_WORD_ATTRIBUTE_TOC_FORMAT_NOT_MIGRATE_CLEAN]
+en-US = "TOC Format will not migrate cleanly"
+
+[RID_STR_WORD_ATTRIBUTE_TOC_FORMAT_NOT_ROUNDTRIP_CLEAN]
+en-US = "TOC will not roundtrip cleanly due to following settings"
+
+[RID_STR_WORD_ATTRIBUTE_TOC_FORMAT_FROM_TEMPLATE_WITH_LEVEL]
+en-US = "Format [FromTemplate] Level"
+
+[RID_STR_WORD_ATTRIBUTE_TOC_FORMAT_FROM_TEMPLATE_TAB_DOTS]
+en-US = "Format [FromTemplate] TabLeader [Dots]"
+
+[RID_STR_WORD_ATTRIBUTE_TOC_FORMAT_FORMAL_WITH_LEVEL]
+en-US = "Format [Formal] Level"
+
+[RID_STR_WORD_ATTRIBUTE_TOC_FORMAT_CLASSIC_WITH_LEVEL]
+en-US = "Format [Classic] Level"
+
+[RID_STR_WORD_ATTRIBUTE_TOC_FORMAT_DISTINCTIVE_WITH_LEVEL]
+en-US = "Format [Distinctive] Level"
+
+[RID_STR_WORD_ENUMERATION_FORM_FIELD_CALCULATION]
+en-US = "Calculation"
+
+[RID_STR_WORD_ENUMERATION_FORM_FIELD_CHECK_BOX]
+en-US = "Check Box Form Field"
+
+[RID_STR_WORD_ENUMERATION_FORM_FIELD_CURRENT_DATE]
+en-US = "Current Date"
+
+[RID_STR_WORD_ENUMERATION_FORM_FIELD_CURRENT_TIME]
+en-US = "Current Time"
+
+[RID_STR_WORD_ENUMERATION_FORM_FIELD_DATE]
+en-US = "Date"
+
+[RID_STR_WORD_ENUMERATION_FORM_FIELD_DEFAULT_DATE]
+en-US = "Default date"
+
+[RID_STR_WORD_ENUMERATION_FORM_FIELD_DEFAULT_EXPRESSION]
+en-US = "Expression"
+
+[RID_STR_WORD_ENUMERATION_FORM_FIELD_DEFAULT_NUMBER]
+en-US = "Default number"
+
+[RID_STR_WORD_ENUMERATION_FORM_FIELD_DEFAULT_TEXT]
+en-US = "Default text"
+
+[RID_STR_WORD_ENUMERATION_FORM_FIELD_DEFAULT_TIME]
+en-US = "Default time"
+
+[RID_STR_WORD_ENUMERATION_FORM_FIELD_DROP_DOWN]
+en-US = "Drop-Down Form Field"
+
+[RID_STR_WORD_ENUMERATION_FORM_FIELD_FORMAT_DATE]
+en-US = "Date format"
+
+[RID_STR_WORD_ENUMERATION_FORM_FIELD_FORMAT_NUMBER]
+en-US = "Number format"
+
+[RID_STR_WORD_ENUMERATION_FORM_FIELD_FORMAT_TEXT]
+en-US = "Text format"
+
+[RID_STR_WORD_ENUMERATION_FORM_FIELD_FORMAT_TIME]
+en-US = "Time format"
+
+[RID_STR_WORD_ENUMERATION_FORM_FIELD_NUMBER]
+en-US = "Number"
+
+[RID_STR_WORD_ENUMERATION_FORM_FIELD_REGULAR]
+en-US = "Regular"
+
+[RID_STR_WORD_ENUMERATION_FORM_FIELD_TEXT]
+en-US = "Text Form Field"
+
+[RID_STR_WORD_ENUMERATION_MAILMERGE_ASK]
+en-US = "Ask"
+
+[RID_STR_WORD_ENUMERATION_MAILMERGE_AUTO_NUMBER]
+en-US = "Auto Number"
+
+[RID_STR_WORD_ENUMERATION_MAILMERGE_AUTO_NUMBER_LEGAL]
+en-US = "Auto Number Legal"
+
+[RID_STR_WORD_ENUMERATION_MAILMERGE_AUTO_NUMBER_OUTLINE]
+en-US = "Auto Number Outline"
+
+[RID_STR_WORD_ENUMERATION_MAILMERGE_FIELD_NAME_NOT_KNOWN]
+en-US = "Field name not known"
+
+[RID_STR_WORD_ENUMERATION_MAILMERGE_FILL_IN]
+en-US = "Fill In"
+
+[RID_STR_WORD_ENUMERATION_MAILMERGE_MERGE_RECORDS]
+en-US = "Merge Records"
+
+[RID_STR_WORD_ENUMERATION_MAILMERGE_MERGE_FIELDS]
+en-US = "Merge Fields"
+
+[RID_STR_WORD_ENUMERATION_MAILMERGE_NEXT]
+en-US = "Next"
+
+[RID_STR_WORD_ENUMERATION_MAILMERGE_REVISION_NUMBER]
+en-US = "Revision Number"
+
+[RID_STR_WORD_ENUMERATION_MAILMERGE_SEQUENCE]
+en-US = "Sequence"
+
+[RID_STR_WORD_ENUMERATION_INDEX_TABLES_CLASSIC]
+en-US = "Classic"
+
+[RID_STR_WORD_ENUMERATION_INDEX_TABLES_DISTINCTIVE]
+en-US = "Distinctive"
+
+[RID_STR_WORD_ENUMERATION_INDEX_TABLES_FANCY]
+en-US = "Fancy"
+
+[RID_STR_WORD_ENUMERATION_INDEX_TABLES_FORMAL]
+en-US = "Formal"
+
+[RID_STR_WORD_ENUMERATION_INDEX_TABLES_MODERN]
+en-US = "Modern"
+
+[RID_STR_WORD_ENUMERATION_INDEX_TABLES_SIMPLE]
+en-US = "Simple"
+
+[RID_STR_WORD_ENUMERATION_INDEX_TABLES_FROM_TEMPLATE]
+en-US = "From Template"
+
+[RID_STR_WORD_ENUMERATION_INDEX_LEADER_DASHES]
+en-US = "Dashes"
+
+[RID_STR_WORD_ENUMERATION_INDEX_LEADER_DOTS]
+en-US = "Dots"
+
+[RID_STR_WORD_ENUMERATION_INDEX_LEADER_HEAVY]
+en-US = "Heavy"
+
+[RID_STR_WORD_ENUMERATION_INDEX_LEADER_LINES]
+en-US = "Lines"
+
+[RID_STR_WORD_ENUMERATION_INDEX_LEADER_MIDDLEDOT]
+en-US = "MiddleDot"
+
+[RID_STR_WORD_ENUMERATION_INDEX_LEADER_SPACES]
+en-US = "Spaces"
+
+[RID_STR_WORD_ENUMERATION_UNKNOWN]
+en-US = "Unknown"
+
+[RID_STR_WORD_FALSE]
+en-US = "False"
+
+[RID_STR_WORD_TRUE]
+en-US = "True"
+
+[RID_STR_WORD_ISSUE_FIELDS]
+en-US = "Fields"
+
+[RID_STR_WORD_ISSUE_INDEX_AND_REFERENCES]
+en-US = "Indexes and References"
+
+[RID_STR_WORD_ISSUE_OBJECTS_GRAPHICS_AND_FRAMES]
+en-US = "Objects, Graphics and Frames"
+
+[RID_STR_WORD_ISSUE_TABLES]
+en-US = "Tables"
+
+[RID_STR_WORD_NOTE_FORM_FIELD_ATTRIBUTES_LOST]
+en-US = "following attribute values lost"
+
+[RID_STR_WORD_NOTE_FORM_FIELD_TYPE_LOST]
+en-US = "Type lost, converted to plain text"
+
+[RID_STR_WORD_NOTE_NESTED_TABLE_WILL_BE_LOST]
+en-US = "The inner table will be lost on roundtrip."
+
+[RID_STR_WORD_NOTE_TOA_FIELD_LOST_ON_ROUNDTRIP]
+en-US = "Field will be lost on roundtrip"
+
+[RID_STR_WORD_NOTE_TOA_MIGRATE_AS_PLAIN_TEXT]
+en-US = "Table will migrate as plain text"
+
+[RID_STR_WORD_SUBISSUE_APPEARANCE]
+en-US = "Appearance"
+
+[RID_STR_WORD_SUBISSUE_COMMENT]
+en-US = "Comment"
+
+[RID_STR_WORD_SUBISSUE_CUSTOM_BULLET_LIST]
+en-US = "Custom bullet list"
+
+[RID_STR_WORD_SUBISSUE_FORM_FIELD]
+en-US = "Form Field"
+
+[RID_STR_WORD_SUBISSUE_MAILMERGE_DATASOURCE]
+en-US = "Mail Merge Datasource"
+
+[RID_STR_WORD_SUBISSUE_MAILMERGE_FIELD]
+en-US = "Mail Merge Field"
+
+[RID_STR_WORD_SUBISSUE_NESTED_TABLES]
+en-US = "Nested Tables"
+
+[RID_STR_WORD_SUBISSUE_OBJECT_IN_HEADER_FOOTER]
+en-US = "Object in Header Footer"
+
+[RID_STR_WORD_SUBISSUE_TABLE_OF_AUTHORITIES]
+en-US = "Table of Authorities"
+
+[RID_STR_WORD_SUBISSUE_TABLE_OF_AUTHORITIES_FIELD]
+en-US = "Table of Authorities Field"
+
+[RID_RESXLT_COST_CHART_Radar_AWF]
+en-US = "Radar chart, Radar with symbol"
+
+[RID_RESXLT_COST_CHART_Radar_Comment]
+en-US = "Although <PRODUCTNAME> Net charts appear similar to Excel Radar charts, but they are not equivalent. Radar charts are drawn clockwise whereas Net charts are drawn counter-clockwise."
+
+[RID_RESXLT_COST_CHART_Scattered_AWF]
+en-US = "Scattered chart"
+
+[RID_RESXLT_COST_CHART_Scattered_Comment]
+en-US = "The XY-Chart of <PRODUCTNAME> has the same appearance as the scattered chart in Excel."
+
+[RID_RESXLT_COST_CHART_Bubble_AWF]
+en-US = "Bubble chart"
+
+[RID_RESXLT_COST_CHART_Bubble_Comment]
+en-US = "XY-Chart has similar functionality to a Bubble chart in Excel but a completely different look."
+
+[RID_RESXLT_COST_CHART_BarOfPie_AWF]
+en-US = "Bar of Pie and Pie of Pie charts"
+
+[RID_RESXLT_COST_CHART_BarOfPie_Comment]
+en-US = "<PRODUCTNAME> imports these types of charts as Column charts, which look completely different."
+
+[RID_RESXLT_COST_CHART_FilledRadar_AWF]
+en-US = "Filled Radar chart"
+
+[RID_RESXLT_COST_CHART_FilledRadar_Comment]
+en-US = "This chart type does not have a <PRODUCTNAME> equivalent. Instead, the import filter in <PRODUCTNAME> converts a Filled Radar chart to a Column chart."
+
+[RID_RESXLT_COST_CHART_Surface_AWF]
+en-US = "Surface chart"
+
+[RID_RESXLT_COST_CHART_Surface_Comment]
+en-US = "This chart type does not have a <PRODUCTNAME> equivalent. The imported chart will look completely different than the original chart."
+
+[RID_RESXLT_COST_PIVOT_MultConsRanges_AWF]
+en-US = "Multiple Consolidation Ranges"
+
+[RID_RESXLT_COST_PIVOT_MultConsRanges_Comment]
+en-US = "A Pivot table from Excel can use data from multiple consolidation ranges, Calc does not support this."
+
+[RID_RESXLT_COST_PIVOT_PivotChart_Comment]
+en-US = "A pivot chart is created dynamically in Excel using a pivot table as it's datasource. <PRODUCTNAME> does not support generating charts from dynamically created tables."
+
+[RID_RESXLT_COST_PIVOT_ManSort_AWF]
+en-US = "Manual Sorting"
+
+[RID_RESXLT_COST_PIVOT_ManSort_Comment]
+en-US = "Pivot table users could sort the results manually. Excel preserves the sorting. Calc does not."
+
+[RID_RESXLT_COST_PIVOT_CalcVal_AWF]
+en-US = "Calculated Values"
+
+[RID_RESXLT_COST_PIVOT_CalcVal_Comment]
+en-US = "Excel users can create a formula that writes the results in a new column within the pivot table. Users can use the same type of formula to replace the content of an existing column. Calc does not support this."
+
+[RID_RESXLT_COST_PIVOT_ExternData_AWF]
+en-US = "External Data"
+
+[RID_RESXLT_COST_PIVOT_ExternData_Comment]
+en-US = "A Pivot table from Excel can use data from external sources. Calc does not support this."
+
+[RID_RESXLS_COST_IAR_Numbering_IssueType]
+en-US = "Numbering Order"
+
+[RID_RESXLS_COST_IAR_Numbering_Comment]
+en-US = "<PRODUCTNAME> first calculates numbering located in frames and then the numbering within the text. Word does not separate this."
+
+[RID_RESXLS_COST_IAR_Numbering_WorkAround]
+en-US = "Move the numberings from within the frames into the text body area."
+
+[RID_RESXLS_COST_WorkbookPartProtection_AWF]
+en-US = "Protection for Parts of Workbooks"
+
+[RID_RESXLS_COST_WorkbookPartProtection_Comment]
+en-US = "In Excel users can protect certain parts of workbooks. Workbooks, sheets, charts and ranges can all be individually protected. These do not all migrate to <PRODUCTNAME>."
+
+[RID_RESXLS_COST_WorkbookPartProtection_WorkAround]
+en-US = "Do not protect Excel workbooks"
+
+[RID_RESXLS_COST_FORMAT_TabStop_IssueType]
+en-US = "Tabstop"
+
+[RID_RESXLS_COST_FORMAT_TabStop_Comment]
+en-US = "The minimum tabstop distance in word is shorter than <PRODUCTNAME>. That means that if, in Word, the user tabs a distance shorter than <PRODUCTNAME>'s minimum, that after migration the text spacing will be pushed one tab further."
+
+[RID_RESXLS_COST_GraphicAnchorEndOfPage_IssueType]
+en-US = "Graphic Object Anchor - End of Page"
+
+[RID_RESXLS_COST_GraphicAnchorEndOfPage_Comment]
+en-US = "If a frame or graphic object (not including AutoShapes) is too close to the end of a page it will be pushed to the next page in <PRODUCTNAME>."
+
+[RID_RESXLS_COST_GraphicAnchorLostGraphic_IssueType]
+en-US = "Graphic Object Anchor - Lost Graphic Object"
+
+[RID_RESXLS_COST_GraphicAnchorLostGraphic_Comment]
+en-US = "If a graphic object is anchored off a paragraph (Format Autoshape | Layout | Advanced | Vertical Position = Paragraph) which contains just a blank carriage return, then this can lead to the graphic object being lost in <PRODUCTNAME>."
+
+[RID_RESXLS_COST_TABLE_Leading_IssueType]
+en-US = "Leading"
+
+[RID_RESXLS_COST_TABLE_Leading_Comment]
+en-US = "Leading can cause extra lines in tables. In a table, if the column width is very close to the text, it can lead to a single character being pushed to new line in <PRODUCTNAME>. This is caused by extra leading in <PRODUCTNAME>."
+
+[RID_RESXLS_COST_TABLE_Misplaced_IssueType]
+en-US = "Misplaced"
+
+[RID_RESXLS_COST_TABLE_Misplaced_Comment]
+en-US = "Text wrapping can cause misplaced tables."
+
+[RID_RESXLS_COST_TOC_HeadlinesWithoutNum_IssueType]
+en-US = "Headings Without Numbering"
+
+[RID_RESXLS_COST_TOC_HeadlinesWithoutNum_Comment]
+en-US = "Many users do not use automatic heading or section numbering. They type the numbers in front of the heading manually instead. Word displays the first TAB of the heading in the TOC. <PRODUCTNAME> does not. The TOC will look different."
+
+[RID_RESXLS_COST_TOC_HeadlinesWithoutNum_WorkAround]
+en-US = "Replace the manual numbering with automatic numbering or add spaces between the manual numbers and the text."
+
+[RID_RESXLS_COST_TABLE_AlignmentOfObjects_IssueType]
+en-US = "Horizontal Alignment of Objects"
+
+[RID_RESXLS_COST_TABLE_AlignmentOfObjects_Comment]
+en-US = "Graphics, WordArt or similar objects located in text tables get displayed in the wrong position when the absolute position of the horizontal alignment is defined instead of a relative position."
+
+[RID_RESXLS_COST_TABLE_AlignmentOfObjects_WorkAround]
+en-US = "Adjust the horizontal alignment manually."
+
+[RID_STR_WORD_ATTRIBUTE_COUNT]
+en-US = "Count"
+
+[RID_STR_EXCEL_NOTE_CELL_FUNCTIONS_DATEDIF]
+en-US = "<PRODUCTNAME> Calc does not have an equivalent 'DATEDIF' function."
+
+[RID_STR_EXCEL_NOTE_CELL_FUNCTIONS_PHONETIC]
+en-US = "<PRODUCTNAME> does not have an equivalent 'PHONETIC' function."
+
+[RID_STR_PP_SUBISSUE_BACKGROUND_NOTE]
+en-US = "Fill style background colors applied to shapes in PowerPoint might be lost after a round trip conversion in <PRODUCTNAME>."
+
+[RID_STR_PP_SUBISSUE_NUMBERING_NOTE]
+en-US = "Only the first paragraph in a numbered sequence can start with "1" in <PRODUCTNAME>. The numbering can only start with "2" or higher in subsequent paragraphs."
+
+[RID_STR_PP_SUBISSUE_HYPERLINK_NOTE]
+en-US = "Unlike PowerPoint, <PRODUCTNAME> does not support multiple text formats in hyperlink text. Instead, <PRODUCTNAME> creates a separate hyperlink for each formatting style in an imported hyperlink."
+
+[RID_STR_PP_SUBISSUE_HYPERLINK_SPLIT_NOTE]
+en-US = "PowerPoint splits the text representation of a hyperlink into several lines when the text box is not wide enough. <PRODUCTNAME> does not split hyperlinks so the hyperlink text might extend out of the text box."
+
+[RID_STR_PP_SUBISSUE_TEMPLATE_NOTE]
+en-US = "<PRODUCTNAME> does not support the PowerPoint 'Title Slide' layout. When you import this layout, most of the subtitle object attributes are converted to hard attributes. PowerPoint 97 users require the multiple master page patch from Microsoft to view 'Title Slide' layouts that are contained in round trip documents."
+
+[RID_STR_PP_SUBISSUE_TABSTOP_NOTE]
+en-US = "Unlike PowerPoint, <PRODUCTNAME> only supports one default tab stop in a document and not one for each text object. If a PowerPoint document uses more than one default tab stop for text objects, <PRODUCTNAME> assigns hard tab stops to these text objects to ensure an identical layout when you import the document. The default tab stops are not reinserted when you save the document in PowerPoint format."
+
+[RID_STR_PP_SUBISSUE_FONTS]
+en-US = "Embedded Fonts"
+
+[RID_STR_PP_SUBISSUE_FONTS_NOTE]
+en-US = "<PRODUCTNAME> doesn't support embedded fonts."
+
+[RID_STR_COMMON_SUBISSUE_TRANSPARENCY_NOTE]
+en-US = "Microsoft Office supports a color attribute that allows you to make a bitmap color transparent without modifying the orginal bitmap. When you import a document with such a bitmap, <PRODUCTNAME> changes the bitmap to match the transparent color. The transparent color attribute is lost."
+
+[RID_STR_COMMON_SUBISSUE_LINE_NOTE]
+en-US = "<PRODUCTNAME> does not support all of the line styles that you can apply to MS Office AutoShapes. As a result, <PRODUCTNAME> replaces double and triple line styles with a single line."
+
+[RID_STR_COMMON_SUBISSUE_GRADIENT_PRESET_NOTE]
+en-US = "<PRODUCTNAME> does not support preset gradient styles."
+
+[RID_STR_COMMON_SUBISSUE_GRADIENT_CORNER_NOTE]
+en-US = "<PRODUCTNAME> does not support the 'from center' gradient style."
+
+[RID_STR_COMMON_SUBISSUE_GRADIENT_CENTER_NOTE]
+en-US = "<PRODUCTNAME> does not support the 'from corner' gradient style."
+
+[RID_RESXLS_COST_DB_Query]
+en-US = "Database Query"
+
+[RID_RESXLS_COST_DB_Query_Comment]
+en-US = "Issue: <PRODUCTNAME> can not import the database query. "
+
+[RID_RESXLS_COST_LineStyle]
+en-US = "Line Style"
+
+[RID_RESXLS_COST_LineStyle_Comment]
+en-US = "Issue: Line style is not supported."
+
+[RID_RESXLS_COST_Numbering]
+en-US = "Numbering"
+
+[RID_RESXLS_COST_Numbering_Comment]
+en-US = "Issue: Text numbering starts with wrong number."
+
+[RID_RESXLS_COST_Template]
+en-US = "Layout 'Title Slide'"
+
+[RID_RESXLS_COST_Template_Comment]
+en-US = "Issue: 'Title Slide' layout is not supported."
+
+[RID_RESXLS_COST_DATEDIF_Note]
+en-US = "Use a date or time function that <PRODUCTNAME> Calc supports."
+
+[RID_RESXLS_COST_Tabstop]
+en-US = "Default Tabulator"
+
+[RID_RESXLS_COST_Tabstop_Comment]
+en-US = "Issue: Different default tabulators are not supported for text objects."
+
+[RID_RESXLS_COST_Transparent]
+en-US = "Transparent Color"
+
+[RID_RESXLS_COST_Transparent_Comment]
+en-US = "Issue: <PRODUCTNAME> does not support the transparent color attribute in bitmaps."
+
+[RID_RESXLS_COST_GradientStyle]
+en-US = "Gradient Style"
+
+[RID_RESXLS_COST_GradientStyle_Comment]
+en-US = "Issue: Unsupported gradient styles used."
+
+[RID_RESXLS_COST_GradientStyle_Note]
+en-US = "Replacing gradient styles by styles that are supported."
+
+[RID_RESXLS_COST_Hyperlink]
+en-US = "Textrange Hyperlinks"
+
+[RID_RESXLS_COST_Hyperlink_Comment]
+en-US = "Issue: Multiple text formatting is not supported in Hyperlinks."
+
+[RID_RESXLS_COST_HyperlinkSplit]
+en-US = "Split Hyperlinks"
+
+[RID_RESXLS_COST_HyperlinkSplit_Comment]
+en-US = "Issue: Hyperlink will not be split onto several lines."
+
+[RID_RESXLS_COST_Background]
+en-US = "Fill Type Background"
+
+[RID_RESXLS_COST_Background_Comment]
+en-US = "Issue: Fillstyle background is not supported."
+
diff --git a/migrationanalysis/src/driver_docs/makefile.mk b/migrationanalysis/src/driver_docs/makefile.mk
new file mode 100644
index 000000000000..bc337be70099
--- /dev/null
+++ b/migrationanalysis/src/driver_docs/makefile.mk
@@ -0,0 +1,131 @@
+#*************************************************************************
+#
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+#
+# Copyright 2008 by Sun Microsystems, Inc.
+#
+# OpenOffice.org - a multi-platform office productivity suite
+#
+# $RCSfile: makefile.mk,v $
+#
+# $Revision: 1.8.34.3 $
+#
+# This file is part of OpenOffice.org.
+#
+# OpenOffice.org is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Lesser General Public License version 3
+# only, as published by the Free Software Foundation.
+#
+# OpenOffice.org is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU Lesser General Public License version 3 for more details
+# (a copy is included in the LICENSE file that accompanied this code).
+#
+# You should have received a copy of the GNU Lesser General Public License
+# version 3 along with OpenOffice.org. If not, see
+# <http://www.openoffice.org/license.html>
+# for a copy of the LGPLv3 License.
+#
+#*************************************************************************
+
+PRJ=..$/..
+
+PRJNAME=migrationanalysis
+TARGET=driverdocs
+
+# --- Settings -----------------------------------------------------
+
+.INCLUDE : settings.mk
+
+# --- Files --------------------------------------------------------
+
+PAW_DOCDEST:=$(BIN)$/ProAnalysisWizard$/Resources
+PAW_DATDEST:=$(BIN)$/ProAnalysisWizard$/Resources$/lang
+
+PAW_DRIVER_DOCS:= \
+ $(PAW_DOCDEST)$/_OOoDocAnalysisExcelDriver.xls \
+ $(PAW_DOCDEST)$/_OOoDocAnalysisWordDriver.doc \
+ $(PAW_DOCDEST)$/_OOoDocAnalysisPPTDriver.ppt
+
+PAW_DRIVER_DOCS_SRC:= \
+ .$/PAW$/_OOoDocAnalysisExcelDriver.xls \
+ .$/PAW$/_OOoDocAnalysisWordDriver.doc \
+ .$/PAW$/_OOoDocAnalysisPPTDriver.ppt
+
+PAW_DAT_FILES= \
+ $(foreach,i,$(alllangiso) $(PAW_DATDEST)$/$i.dat)
+
+DAT_DATA_FILE=allstrings.ulf
+DAT_DON_FILE_PAW=$(MISC)$/$(DAT_DATA_FILE).paw
+
+ULFFILES=$(DAT_DATA_FILE)
+.IF "$(WITH_LANG)"!=""
+ULFDIR:=$(COMMONMISC)$/$(TARGET)
+.ELSE # "$(WITH_LANG)"!=""
+ULFDIR:=.
+.ENDIF # "$(WITH_LANG)"!=""
+
+COMMON_SRC:= \
+ .$/sources$/AnalysisDriver.bas \
+ .$/sources$/CollectedFiles.cls \
+ .$/sources$/CommonMigrationAnalyser.bas \
+ .$/sources$/CommonPreparation.bas \
+ .$/sources$/DocumentAnalysis.cls \
+ .$/sources$/FileTypeAssociation.cls \
+ .$/sources$/IssueInfo.cls \
+ .$/sources$/LocalizeResults.bas \
+ .$/sources$/PrepareInfo.cls \
+ .$/sources$/StringDataManager.cls \
+ .$/sources$/Stripped_OOoDocAnalysisExcelDriver.xls \
+ .$/sources$/Stripped_OOoDocAnalysisPPTDriver.ppt \
+ .$/sources$/Stripped_OOoDocAnalysisWordDriver.doc \
+ .$/sources$/common_res.bas \
+ .$/sources$/results_res.bas
+
+EXCEL_SRC:= \
+ .$/sources$/excel$/ApplicationSpecific.bas \
+ .$/sources$/excel$/MigrationAnalyser.cls \
+ .$/sources$/excel$/Preparation.bas \
+ .$/sources$/excel$/excel_res.bas
+
+PP_SRC:= \
+ .$/sources$/powerpoint$/ApplicationSpecific.bas \
+ .$/sources$/powerpoint$/MigrationAnalyser.cls \
+ .$/sources$/powerpoint$/Preparation.bas \
+ .$/sources$/powerpoint$/powerpoint_res.bas
+
+WORD_SRC:= \
+ .$/sources$/word$/ApplicationSpecific.bas \
+ .$/sources$/word$/MigrationAnalyser.cls \
+ .$/sources$/word$/Preparation.bas \
+ .$/sources$/word$/word_res.bas
+
+# --- Targets ------------------------------------------------------
+
+.INCLUDE : target.mk
+
+ALLTAR : $(PAW_DRIVER_DOCS) $(DAT_DON_FILE_PAW)
+
+$(PAW_DRIVER_DOCS) : .$/PAW$/$$(@:f)
+ -$(MKDIRHIER) $(@:d)
+ $(COPY) .$/PAW$/$(@:f) $@
+
+$(PAW_DAT_FILES) : $(ULFDIR)$/$(DAT_DATA_FILE)
+ -$(MKDIRHIER) $(@:d)
+ $(TOUCH) $@
+
+$(DAT_DON_FILE_PAW) : $(PAW_DAT_FILES)
+ @echo --------------------------------
+ @echo building $@
+ -$(MKDIRHIER) $(@:d)
+ @echo making $(PAW_DAT_FILES)
+ $(PERL) ulf2dat.pl -i $(ULFDIR)$/$(DAT_DATA_FILE) $(PAW_DAT_FILES) && $(TOUCH) $@
+
+.IF "$(VB6_LOCATION)" != ""
+$(PAW_DRIVER_DOCS_SRC) : $(COMMON_SRC) $(EXCEL_SRC) $(PP_SRC) $(WORD_SRC)
+ @echo --------------------------------
+ @echo create driver docs
+ cscript CreateDriverDocs.wsf
+.ENDIF
+
diff --git a/migrationanalysis/src/driver_docs/sources/AnalysisDriver.bas b/migrationanalysis/src/driver_docs/sources/AnalysisDriver.bas
new file mode 100644
index 000000000000..5cb0fa6c5401
--- /dev/null
+++ b/migrationanalysis/src/driver_docs/sources/AnalysisDriver.bas
@@ -0,0 +1,3648 @@
+Attribute VB_Name = "AnalysisDriver"
+'/*************************************************************************
+' *
+' * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+' *
+' * Copyright 2008 by Sun Microsystems, Inc.
+' *
+' * OpenOffice.org - a multi-platform office productivity suite
+' *
+' * $RCSfile: AnalysisDriver.bas,v $
+' *
+' * This file is part of OpenOffice.org.
+' *
+' * OpenOffice.org is free software: you can redistribute it and/or modify
+' * it under the terms of the GNU Lesser General Public License version 3
+' * only, as published by the Free Software Foundation.
+' *
+' * OpenOffice.org is distributed in the hope that it will be useful,
+' * but WITHOUT ANY WARRANTY; without even the implied warranty of
+' * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+' * GNU Lesser General Public License version 3 for more details
+' * (a copy is included in the LICENSE file that accompanied this code).
+' *
+' * You should have received a copy of the GNU Lesser General Public License
+' * version 3 along with OpenOffice.org. If not, see
+' * <http://www.openoffice.org/license.html>
+' * for a copy of the LGPLv3 License.
+' *
+' ************************************************************************/
+
+Option Explicit
+
+' Declare Public variables.
+Public Type ShortItemId
+ cb As Long
+ abID As Byte
+End Type
+
+Public Type ITEMIDLIST
+ mkid As ShortItemId
+End Type
+
+Public Declare Function FindWindow Lib "user32" Alias _
+ "FindWindowA" (ByVal lpClassName As String, _
+ ByVal lpWindowName As Long) As Long
+
+Private Declare Function GetTickCount Lib "kernel32" () As Long
+
+'This function saves the passed value to the file,
+'under the section and key names specified.
+'If the ini file, lpFileName, does not exist, it is created.
+'If the section, lpSectionName, does not exist, it is created.
+'If the key name, lpKeyName, does not exist, it is created.
+'If the key name exists, it's value, lpString, is replaced.
+Private Declare Function WritePrivateProfileString Lib "kernel32" _
+ Alias "WritePrivateProfileStringA" _
+ (ByVal lpSectionName As String, _
+ ByVal lpKeyName As Any, _
+ ByVal lpString As Any, _
+ ByVal lpFileName As String) As Long
+
+Private Declare Function GetPrivateProfileString Lib "kernel32" _
+ Alias "GetPrivateProfileStringA" _
+ (ByVal lpSectionName As String, _
+ ByVal lpKeyName As Any, _
+ ByVal lpDefault As String, _
+ ByVal lpReturnedString As String, _
+ ByVal nSize As Long, _
+ ByVal lpFileName As String) As Long
+
+Private Declare Function UrlEscape Lib "shlwapi" _
+ Alias "UrlEscapeA" _
+ (ByVal pszURL As String, _
+ ByVal pszEscaped As String, _
+ pcchEscaped As Long, _
+ ByVal dwFlags As Long) As Long
+
+Public Declare Function SHGetPathFromIDList Lib "shell32.dll" _
+ (ByVal pidl As Long, ByVal pszPath As String) As Long
+
+Public Declare Function SHGetSpecialFolderLocation Lib _
+ "shell32.dll" (ByVal hwndOwner As Long, ByVal nFolder _
+ As Long, pidl As ITEMIDLIST) As Long
+
+Public Const LOCALE_ILANGUAGE As Long = &H1 'language id
+Public Const LOCALE_SLANGUAGE As Long = &H2 'localized name of lang
+Public Const LOCALE_SENGLANGUAGE As Long = &H1001 'English name of lang
+Public Const LOCALE_SABBREVLANGNAME As Long = &H3 'abbreviated lang name
+Public Const LOCALE_SNATIVELANGNAME As Long = &H4 'native name of lang
+Public Const LOCALE_ICOUNTRY As Long = &H5 'country code
+Public Const LOCALE_SCOUNTRY As Long = &H6 'localized name of country
+Public Const LOCALE_SENGCOUNTRY As Long = &H1002 'English name of country
+Public Const LOCALE_SABBREVCTRYNAME As Long = &H7 'abbreviated country name
+Public Const LOCALE_SNATIVECTRYNAME As Long = &H8 'native name of country
+Public Const LOCALE_SINTLSYMBOL As Long = &H15 'intl monetary symbol
+Public Const LOCALE_IDEFAULTLANGUAGE As Long = &H9 'def language id
+Public Const LOCALE_IDEFAULTCOUNTRY As Long = &HA 'def country code
+Public Const LOCALE_IDEFAULTCODEPAGE As Long = &HB 'def oem code page
+Public Const LOCALE_IDEFAULTANSICODEPAGE As Long = &H1004 'def ansi code page
+Public Const LOCALE_IDEFAULTMACCODEPAGE As Long = &H1011 'def mac code page
+
+Public Const LOCALE_IMEASURE As Long = &HD '0 = metric, 1 = US
+Public Const LOCALE_SSHORTDATE As Long = &H1F 'short date format string
+
+'#if(WINVER >= &H0400)
+Public Const LOCALE_SISO639LANGNAME As Long = &H59 'ISO abbreviated language name
+Public Const LOCALE_SISO3166CTRYNAME As Long = &H5A 'ISO abbreviated country name
+'#endif /* WINVER >= as long = &H0400 */
+
+'#if(WINVER >= &H0500)
+Public Const LOCALE_SNATIVECURRNAME As Long = &H1008 'native name of currency
+Public Const LOCALE_IDEFAULTEBCDICCODEPAGE As Long = &H1012 'default ebcdic code page
+Public Const LOCALE_SSORTNAME As Long = &H1013 'sort name
+'#endif /* WINVER >= &H0500 */
+
+Public Declare Function GetSystemDefaultLangID Lib "kernel32" () As Long
+Public Declare Function GetUserDefaultLangID Lib "kernel32" () As Long
+
+Public Declare Function GetLocaleInfo Lib "kernel32" _
+ Alias "GetLocaleInfoA" _
+ (ByVal Locale As Long, _
+ ByVal LCType As Long, _
+ ByVal lpLCData As String, _
+ ByVal cchData As Long) As Long
+
+
+Public Const CWIZARD = "analysis"
+
+Const CROWOFFSET = 2
+Const CDOCPROP_PAW_ROWOFFSET = 3
+Private mDocPropRowOffset As Long
+
+Const CNUMBERDOC_ALL = "All"
+Const CTOTAL_DOCS_ANALYZED = "TotalDocsAnalysed"
+Const CNUMDAYS_IN_MONTH = 30
+Const CMAX_LIMIT = 10000
+
+Const CISSUE_DETDOCNAME = 1
+Const CISSUE_DETDOCAPPLICATION = CISSUE_DETDOCNAME + 1
+Const CISSUE_DETTYPE = CISSUE_DETDOCAPPLICATION + 1
+Const CISSUE_DETSUBTYPE = CISSUE_DETTYPE + 1
+Const CISSUE_DETLOCATION = CISSUE_DETSUBTYPE + 1
+Const CISSUE_DETSUBLOCATION = CISSUE_DETLOCATION + 1
+Const CISSUE_DETLINE = CISSUE_DETSUBLOCATION + 1
+Const CISSUE_DETCOLUMN = CISSUE_DETLINE + 1
+Const CISSUE_DETATTRIBUTES = CISSUE_DETCOLUMN + 1
+Const CISSUE_DETNAMEANDPATH = CISSUE_DETATTRIBUTES + 1
+
+Const CREF_DETDOCNAME = 1
+Const CREF_DETDOCAPPLICATION = CREF_DETDOCNAME + 1
+Const CREF_DETREFERENCE = CREF_DETDOCAPPLICATION + 1
+Const CREF_DETDESCRIPTION = CREF_DETREFERENCE + 1
+Const CREF_DETLOCATION = CREF_DETDESCRIPTION + 1
+Const CREF_DETATTRIBUTES = CREF_DETLOCATION + 1
+Const CREF_DETNAMEANDPATH = CREF_DETATTRIBUTES + 1
+
+Const CINPUT_DIR = "indir"
+Const COUTPUT_DIR = "outdir"
+Const CRESULTS_FILE = "resultsfile"
+Const CLOG_FILE = "logfile"
+Const CRESULTS_TEMPLATE = "resultstemplate"
+Const CRESULTS_EXIST = "resultsexist"
+Const COVERWRITE_FILE = "overwritefile"
+Const CNEW_RESULTS_FILE = "newresultsfile"
+Const CINCLUDE_SUBDIRS = "includesubdirs"
+Const CDEBUG_LEVEL = "debuglevel"
+Const COUTPUT_TYPE = "outputtype"
+Const COUTPUT_TYPE_XLS = "xls"
+Const COUTPUT_TYPE_XML = "xml"
+Const COUTPUT_TYPE_BOTH = "both"
+Const COVERVIEW_TITLE_LABEL = "OV_Document_Analysis_Overview_lbl"
+Const CDEFAULT_PASSWORD = "defaultpassword"
+Const CVERSION = "version"
+Const CTITLE = "title"
+Const CDOPREPARE = "prepare"
+Const CISSUES_LIMIT = "issuesmonthlimit"
+Const CSINGLE_FILE = "singlefile"
+Const CFILE_LIST = "filelist"
+Const CSTAT_FILE = "statfilename"
+Const C_ABORT_ANALYSIS = "abortanalysis"
+Const C_DOCS_LESS_3_MONTH = "DocumentsYoungerThan3Month"
+Const C_DOCS_LESS_6_MONTH = "DocumentsYoungerThan6Month"
+Const C_DOCS_LESS_12_MONTH = "DocumentsYoungerThan12Month"
+Const C_DOCS_MORE_12_MONTH = "DocumentsOlderThan12Month"
+
+Private Const C_ANALYSIS As String = "Analysis"
+Private Const C_LAST_CHECKPOINT As String = "LastCheckpoint"
+Private Const C_NEXT_FILE As String = "NextFile"
+Private Const C_MAX_CHECK_INI As String = "FilesBeforeSave"
+Private Const C_MAX_WAIT_BEFORE_WRITE_INI As String = "SecondsBeforeSave"
+Private Const C_MAX_RANGE_PROCESS_TIME_INI As String = "ExcelMaxRangeProcessTime"
+Private Const C_ERROR_HANDLING_DOC As String = "_ERROR_HANDLING_DOC_"
+Private Const C_MAX_CHECK As Long = 100
+Private Const C_MAX_WAIT_BEFORE_WRITE As Long = 300 ' sec
+Private Const C_MAX_RANGE_PROCESS_TIME As Integer = 30 'sec
+
+Private Const C_STAT_STARTING As Integer = 1
+Private Const C_STAT_DONE As Integer = 2
+Private Const C_STAT_FINISHED As Integer = 3
+
+Private Type DocumentCount
+ numDocsAnalyzed As Long
+ numDocsAnalyzedWithIssues As Long
+ numMinorIssues As Long
+ numComplexIssues As Long
+ numMacroIssues As Long
+ numPreparableIssues As Long
+ totalMacroCosts As Long
+ totalDocIssuesCosts As Long
+ totalPreparableIssuesCosts As Long
+End Type
+
+Private Type DocModificationDates
+ lessThanThreemonths As Long
+ threeToSixmonths As Long
+ sixToTwelvemonths As Long
+ greaterThanOneYear As Long
+End Type
+
+Private Type DocMacroClassifications
+ None As Long
+ Simple As Long
+ Medium As Long
+ complex As Long
+End Type
+
+Private Type DocIssueClassifications
+ None As Long
+ Minor As Long
+ complex As Long
+End Type
+
+Const CCOST_COL_OFFSET = -1
+
+Private mLogFilePath As String
+Private mDocIndex As String
+Private mDebugLevel As Long
+Private mIniFilePath As String
+Private mUserFormTypesDict As Scripting.Dictionary
+Private mIssuesDict As Scripting.Dictionary
+Private mMacroDict As Scripting.Dictionary
+Private mPreparedIssuesDict As Scripting.Dictionary
+Private mIssuesClassificationDict As Scripting.Dictionary
+Private mIssuesCostDict As Scripting.Dictionary
+Private mIssuesLimit As Date
+
+Public Const CWORD_DRIVER_FILE = "_OOoDocAnalysisWordDriver.doc"
+Public Const CEXCEL_DRIVER_FILE = "_OOoDocAnalysisExcelDriver.xls"
+Public Const CPP_DRIVER_FILE = "_OOoDocAnalysisPPTDriver.ppt"
+Public Const CWORD_DRIVER_FILE_TEMP = "~$OoDocAnalysisWordDriver.doc"
+Public Const CEXCEL_DRIVER_FILE_TEMP = "~$OoDocAnalysisExcelDriver.xls"
+Public Const CPP_DRIVER_FILE_TEMP = "~$OoDocAnalysisPPTDriver.ppt"
+
+'Doc Properties Offsets - used in WriteDocProperties and GetPreparableFilesFromDocProps
+Const CDOCINFONAME = 1
+Const CDOCINFOAPPLICATION = CDOCINFONAME + 1
+
+Const CDOCINFOISSUE_CLASS = CDOCINFOAPPLICATION + 1
+Const CDOCINFOCOMPLEXISSUES = CDOCINFOISSUE_CLASS + 1
+Const CDOCINFOMINORISSUES = CDOCINFOCOMPLEXISSUES + 1
+Const CDOCINFOPREPAREDISSUES = CDOCINFOMINORISSUES + 1
+
+Const CDOCINFOMACRO_CLASS = CDOCINFOPREPAREDISSUES + 1
+Const CDOCINFOMACRO_USERFORMS = CDOCINFOMACRO_CLASS + 1
+Const CDOCINFOMACRO_LINESOFCODE = CDOCINFOMACRO_USERFORMS + 1
+
+Const CDOCINFODOCISSUECOSTS = CDOCINFOMACRO_LINESOFCODE + 1
+Const CDOCINFOPREPARABLEISSUECOSTS = CDOCINFODOCISSUECOSTS + 1
+Const CDOCINFOMACROISSUECOSTS = CDOCINFOPREPARABLEISSUECOSTS + 1
+
+Const CDOCINFONUMBERPAGES = CDOCINFOMACROISSUECOSTS + 1
+Const CDOCINFOCREATED = CDOCINFONUMBERPAGES + 1
+Const CDOCINFOLASTMODIFIED = CDOCINFOCREATED + 1
+Const CDOCINFOLASTACCESSED = CDOCINFOLASTMODIFIED + 1
+Const CDOCINFOLASTPRINTED = CDOCINFOLASTACCESSED + 1
+Const CDOCINFOLASTSAVEDBY = CDOCINFOLASTPRINTED + 1
+Const CDOCINFOREVISION = CDOCINFOLASTSAVEDBY + 1
+Const CDOCINFOTEMPLATE = CDOCINFOREVISION + 1
+Const CDOCINFONAMEANDPATH = CDOCINFOTEMPLATE + 1
+
+'Overview shapes
+Const COV_DOC_MOD_DATES_CHART = "Chart 21"
+Const COV_DOC_MACRO_CHART = "Chart 22"
+Const COV_DOC_ANALYSIS_CHART = "Chart 23"
+
+Const COV_DOC_MOD_DATES_COMMENT_TXB = "Text Box 25"
+Const COV_DOC_MOD_DATES_LEGEND_TXB = "Text Box 12"
+
+Const COV_DOC_MACRO_COMMENT_TXB = "Text Box 26"
+Const COV_DOC_MACRO_LEGEND_TXB = "Text Box 16"
+
+Const COV_DOC_ANALYSIS_COMMENT_TXB = "Text Box 27"
+Const COV_DOC_ANALYSIS_LEGEND_DAW_TXB = "Text Box 28"
+Const COV_DOC_ANALYSIS_LEGEND_PAW_TXB = "Text Box 18"
+
+Const COV_HIGH_LEVEL_ANALYSIS_RANGE = "OV_High_Level_Analysis_Range"
+Const COV_COST_RANGE = "OV_Cost_Range"
+
+'Sheet labels
+Const COV_HIGH_LEVEL_ANALYSIS_LBL = "OV_High_level_analysis_lbl"
+Const COV_DP_PREPISSUES_COL_LBL = "DocProperties_PreparedIssues_Column"
+Const COV_COSTS_PREPISSUE_COUNT_COL_LBL = "Costs_PreparedIssueCount_Column"
+Const CDP_DAW_HIDDEN_COLS_LBL = "DP_DAW_HIDDEN_COLS_RANGE"
+Const CDP_DAW_HIDDEN_COLS2_LBL = "DP_DAW_HIDDEN_COLS_RANGE2"
+Const CDP_DAW_HIDDEN_ROW_LBL = "DP_DAW_HIDDEN_ROW_RANGE"
+
+Const COV_DAW_SETUP_SHEETS_RUN_LBL = "OV_DAW_SETUP_SHEETS_RUN"
+Const COV_PAW_SETUP_SHEETS_RUN_LBL = "OV_PAW_SETUP_SHEETS_RUN"
+Const COV_Internal_Attributes_Cols_LBL = "OV_Internal_Attributes_Cols"
+
+Const CR_STR = "<CR>"
+Const CR_TOPIC = "<TOPIC>"
+Const CR_PRODUCT = "<PRODUCT>"
+
+Const CLEGEND_FONT_SIZE = 8
+Const CCOMMENTS_FONT_SIZE = 10
+
+Dim mTstart As Single
+Dim mTend As Single
+Public gExcelMaxRangeProcessTime As Integer
+
+Sub AnalyseDirectory()
+ On Error GoTo HandleErrors
+ Dim currentFunctionName As String
+ currentFunctionName = "AnalyseDirectory"
+
+ Dim iniFilePath As String
+ Dim startDir As String
+ Dim fileList As String
+ Dim storeToDir As String
+ Dim resultsFile As String
+ Dim resultsTemplate As String
+ Dim statFileName As String
+ Dim bOverwriteResultsFile As Boolean
+ Dim bNewResultsFile As Boolean
+ Dim outputType As String
+ Dim singleFile As String
+ Dim nTimeNeeded As Long
+ Dim nIncrementFileCounter As Long
+ Dim nMaxWaitBeforeWrite As Long
+ Dim fso As Scripting.FileSystemObject
+ Set fso = New Scripting.FileSystemObject
+
+ SetAppToMinimized
+
+ If InDocPreparation Then
+ mDocPropRowOffset = CDOCPROP_PAW_ROWOFFSET
+ Else
+ mDocPropRowOffset = CROWOFFSET
+ End If
+
+ 'Get Wizard input variables
+ SetupWizardVariables fileList, storeToDir, resultsFile, _
+ mLogFilePath, resultsTemplate, bOverwriteResultsFile, bNewResultsFile, _
+ statFileName, mDebugLevel, outputType, singleFile
+
+ startDir = ProfileGetItem("Analysis", CINPUT_DIR, "", mIniFilePath)
+
+ nIncrementFileCounter = CLng(ProfileGetItem("Analysis", _
+ C_MAX_CHECK_INI, C_MAX_CHECK, mIniFilePath))
+ nMaxWaitBeforeWrite = CLng(ProfileGetItem("Analysis", _
+ C_MAX_WAIT_BEFORE_WRITE_INI, C_MAX_WAIT_BEFORE_WRITE, mIniFilePath))
+ gExcelMaxRangeProcessTime = CInt(ProfileGetItem("Analysis", _
+ C_MAX_RANGE_PROCESS_TIME_INI, C_MAX_RANGE_PROCESS_TIME, mIniFilePath))
+ LocalizeResources
+
+ 'Setup File List
+ 'For Prepare - get list from results spreadsheet with docs analysis found as preparable
+ 'If no results spreadsheet then just try to prepare all the docs - run over full analysis list
+ Dim myFiles As Collection
+ Set myFiles = New Collection
+ Dim sAnalysisOrPrep As String
+ If InDocPreparation And CheckDoPrepare Then
+ sAnalysisOrPrep = "Prepared"
+ If fso.FileExists(storeToDir & "\" & resultsFile) Then
+ If Not GetPrepareFilesToAnalyze(storeToDir & "\" & resultsFile, myFiles, fso) Then
+ SetPrepareToNone
+ WriteDebug currentFunctionName & ": No files to analyse!"
+ GoTo FinalExit 'No files to prepare - exit
+ End If
+ Else
+ If Not GetFilesToAnalyze(fileList, singleFile, myFiles) Then
+ SetPrepareToNone
+ WriteDebug currentFunctionName & ": No files to analyse! Filelist (" & fileList & ") empty?"
+ GoTo FinalExit 'No files to prepare - exit
+ End If
+ End If
+ Else
+ sAnalysisOrPrep = "Analyzed"
+ If Not GetFilesToAnalyze(fileList, singleFile, myFiles) Then
+ WriteDebug currentFunctionName & ": No files to analyse! Filelist (" & fileList & ") empty?"
+ GoTo FinalExit
+ End If
+ End If
+
+ Dim index As Long
+ Dim numFiles As Long
+ Dim nextSave As Long
+ Dim startIndex As Long
+ Dim bResultsWaiting As Boolean
+ Dim AnalysedDocs As Collection
+ Dim startDate As Date
+ Dim currentDate As Date
+
+ Set AnalysedDocs = New Collection
+ numFiles = myFiles.count
+ bResultsWaiting = False
+
+ If (singleFile <> "") Then
+ ' No recovery handling for single file analysis and the value in the
+ ' ini file should be used for bNewResultsFile
+ startIndex = 1
+ Else
+ bNewResultsFile = bNewResultsFile And GetIndexValues(startIndex, nextSave, myFiles)
+ End If
+
+ startDate = Now()
+
+ ' Analyse all files
+ For index = startIndex To numFiles
+ Set mIssuesClassificationDict = New Scripting.Dictionary
+ mIssuesClassificationDict.CompareMode = TextCompare
+ Set mIssuesCostDict = New Scripting.Dictionary
+ 'mIssuesCostDict.CompareMode = TextCompare
+
+ Set mUserFormTypesDict = New Scripting.Dictionary
+ Set mIssuesDict = New Scripting.Dictionary
+ Set mMacroDict = New Scripting.Dictionary
+ Set mPreparedIssuesDict = New Scripting.Dictionary
+
+ 'Write to Application log
+ Dim myAnalyser As MigrationAnalyser
+ Set myAnalyser = New MigrationAnalyser
+
+ If (CheckForAbort) Then GoTo FinalExit
+
+ 'Log Analysis
+ WriteToStatFile statFileName, C_STAT_STARTING, myFiles.item(index), fso
+ WriteToLog "Analyzing", myFiles.item(index)
+ WriteToIni C_NEXT_FILE, myFiles.item(index)
+ mDocIndex = index
+
+ 'Do Analysis
+ myAnalyser.DoAnalyse myFiles.item(index), mUserFormTypesDict, startDir, storeToDir, fso
+
+ AnalysedDocs.Add myAnalyser.Results
+ bResultsWaiting = True
+
+ WriteToLog sAnalysisOrPrep, index & "of" & numFiles & _
+ " " & getAppSpecificApplicationName & " Documents"
+ WriteToLog "Analyzing", "Done"
+ WriteToLog sAnalysisOrPrep & "Doc" & index, myFiles.item(index)
+ Set myAnalyser = Nothing
+
+ If (CheckForAbort) Then GoTo FinalExit
+
+ 'No need to output results spreadsheet, just doing prepare
+ If CheckDoPrepare Then GoTo CONTINUE_FOR
+
+ nTimeNeeded = val(DateDiff("s", startDate, Now()))
+ If ((nTimeNeeded > nMaxWaitBeforeWrite) Or _
+ (index >= nextSave)) Then
+ If WriteResults(storeToDir, resultsFile, resultsTemplate, _
+ bOverwriteResultsFile, bNewResultsFile, _
+ outputType, AnalysedDocs, fso) Then
+ nextSave = index + C_MAX_CHECK
+ bResultsWaiting = False
+ Set AnalysedDocs = New Collection
+ WriteToIni C_LAST_CHECKPOINT, myFiles.item(index)
+ startDate = Now()
+ Else
+ 'write error
+ End If
+ End If
+ WriteToStatFile statFileName, C_STAT_DONE, myFiles.item(index), fso
+CONTINUE_FOR:
+ Next index
+
+ If (bResultsWaiting) Then
+ If WriteResults(storeToDir, resultsFile, resultsTemplate, _
+ bOverwriteResultsFile, bNewResultsFile, _
+ outputType, AnalysedDocs, fso) Then
+ WriteToIni C_LAST_CHECKPOINT, myFiles.item(index - 1)
+ Else
+ 'write error
+ End If
+ End If
+ WriteToStatFile statFileName, C_STAT_FINISHED, "", fso
+
+FinalExit:
+
+ Set fso = Nothing
+ Set myFiles = Nothing
+ Set mIssuesClassificationDict = Nothing
+ Set mIssuesCostDict = Nothing
+ Set mUserFormTypesDict = Nothing
+ Set mIssuesDict = Nothing
+ Set mMacroDict = Nothing
+ Set mPreparedIssuesDict = Nothing
+
+ Set AnalysedDocs = Nothing
+
+ Exit Sub
+
+HandleErrors:
+ WriteDebug currentFunctionName & " : " & Err.Number & " " & Err.Description & " " & Err.Source
+ Resume FinalExit
+End Sub
+
+Function WriteResults(storeToDir As String, resultsFile As String, resultsTemplate As String, _
+ bOverwriteResultsFile As Boolean, bNewResultsFile As Boolean, _
+ outputType As String, AnalysedDocs As Collection, _
+ fso As FileSystemObject) As Boolean
+
+ On Error GoTo HandleErrors
+ Dim currentFunctionName As String
+ currentFunctionName = "WriteResults"
+
+ If InDocPreparation Then
+ If outputType = COUTPUT_TYPE_XML Or outputType = COUTPUT_TYPE_BOTH Then
+ WriteXMLOutput storeToDir, resultsFile, _
+ bOverwriteResultsFile, bNewResultsFile, AnalysedDocs, fso
+ End If
+ End If
+
+ If outputType = COUTPUT_TYPE_XLS Or outputType = COUTPUT_TYPE_BOTH Then
+ WriteXLSOutput storeToDir, resultsFile, fso.GetAbsolutePathName(resultsTemplate), _
+ bOverwriteResultsFile, bNewResultsFile, AnalysedDocs, fso
+ End If
+
+ WriteResults = True
+ bNewResultsFile = False
+
+FinalExit:
+ Exit Function
+
+HandleErrors:
+ WriteResults = False
+ WriteDebug currentFunctionName & " : " & Err.Number & " " & Err.Description & " " & Err.Source
+ Resume FinalExit
+End Function
+
+Function GetFilesToAnalyze_old(startDir As String, bIncludeSubdirs As Boolean, _
+ myFiles As Collection) As Boolean
+ On Error GoTo HandleErrors
+ Dim currentFunctionName As String
+ currentFunctionName = "GetFilesToAnalyze"
+ Dim fso As New FileSystemObject
+ Dim theResultsFile As String
+ theResultsFile = ProfileGetItem("Analysis", CINPUT_DIR, "c:\", mIniFilePath) & "\" & ProfileGetItem("Analysis", CRESULTS_FILE, "", mIniFilePath)
+
+ GetFilesToAnalyze = False
+
+ Dim searchTypes As Collection
+ Set searchTypes = New Collection
+ SetupSearchTypes searchTypes
+ If searchTypes.count = 0 Then
+ GoTo FinalExit
+ End If
+
+ Dim myDocFiles As CollectedFiles
+ Set myDocFiles = New CollectedFiles
+ With myDocFiles
+ .BannedList.Add fso.GetAbsolutePathName(getAppSpecificPath & "\" & CWORD_DRIVER_FILE)
+ .BannedList.Add fso.GetAbsolutePathName(getAppSpecificPath & "\" & CEXCEL_DRIVER_FILE)
+ .BannedList.Add fso.GetAbsolutePathName(getAppSpecificPath & "\" & CPP_DRIVER_FILE)
+ .BannedList.Add fso.GetAbsolutePathName(getAppSpecificPath & "\" & CWORD_DRIVER_FILE_TEMP)
+ .BannedList.Add fso.GetAbsolutePathName(getAppSpecificPath & "\" & CEXCEL_DRIVER_FILE_TEMP)
+ .BannedList.Add fso.GetAbsolutePathName(getAppSpecificPath & "\" & CPP_DRIVER_FILE_TEMP)
+ .BannedList.Add theResultsFile
+ End With
+ myDocFiles.Search rootDir:=startDir, FileSpecs:=searchTypes, _
+ IncludeSubdirs:=bIncludeSubdirs
+
+ If getAppSpecificApplicationName = CAPPNAME_WORD Then
+ Set myFiles = myDocFiles.WordFiles
+ ElseIf getAppSpecificApplicationName = CAPPNAME_EXCEL Then
+ Set myFiles = myDocFiles.ExcelFiles
+ ElseIf getAppSpecificApplicationName = CAPPNAME_POWERPOINT Then
+ Set myFiles = myDocFiles.PowerPointFiles
+ Else
+ WriteDebug currentFunctionName & " : invalid application " & getAppSpecificApplicationName
+ GoTo FinalExit
+ End If
+
+ GetFilesToAnalyze = True
+
+FinalExit:
+ Set searchTypes = Nothing
+ Set myDocFiles = Nothing
+
+ Exit Function
+
+HandleErrors:
+ WriteDebug currentFunctionName & " : " & Err.Number & " " & Err.Description & " " & Err.Source
+ Resume FinalExit
+End Function
+
+Function GetFilesToAnalyze(fileList As String, startFile As String, _
+ myFiles As Collection) As Boolean
+
+ On Error GoTo HandleErrors
+ Dim currentFunctionName As String
+ currentFunctionName = "GetFilesToAnalyze"
+
+ Dim fso As New FileSystemObject
+ Dim fileContent As TextStream
+ Dim fileName As String
+
+ GetFilesToAnalyze = False
+
+ If (startFile = "") Then
+ If (fso.FileExists(fileList)) Then
+ Set fileContent = fso.OpenTextFile(fileList, ForReading, False, TristateTrue)
+ While (Not fileContent.AtEndOfStream)
+ fileName = fileContent.ReadLine
+ fileName = Trim(fileName)
+ If (fileName <> "") Then
+ myFiles.Add (fileName)
+ End If
+ Wend
+ fileContent.Close
+ End If
+ Else
+ myFiles.Add (startFile)
+ End If
+
+ If (myFiles.count <> 0) Then GetFilesToAnalyze = True
+
+FinalExit:
+ Set fileContent = Nothing
+ Set fso = Nothing
+ Exit Function
+
+HandleErrors:
+ WriteDebug currentFunctionName & " : " & Err.Number & " " & Err.Description & " " & Err.Source
+ Resume FinalExit
+End Function
+
+Function GetPrepareFilesToAnalyze(resultsFilePath As String, myFiles As Collection, _
+ fso As FileSystemObject) As Boolean
+ On Error GoTo HandleErrors
+ Dim currentFunctionName As String
+ currentFunctionName = "GetPrepareFilesToAnalyze"
+
+ GetPrepareFilesToAnalyze = False
+
+ If Not fso.FileExists(resultsFilePath) Then
+ WriteDebug currentFunctionName & ": results file does not exist : " & resultsFilePath
+ GoTo FinalExit
+ End If
+
+ 'Open results spreadsheet
+ Dim xl As Excel.Application
+ If getAppSpecificApplicationName = CAPPNAME_EXCEL Then
+ Set xl = Application
+ xl.Visible = True
+ Else
+ Set xl = GetExcelInstance
+ xl.Visible = False
+ End If
+ Dim logWb As WorkBook
+ Set logWb = xl.Workbooks.Open(resultsFilePath)
+
+ Dim wsDocProp As Worksheet
+ Set wsDocProp = logWb.Sheets(RID_STR_COMMON_RESULTS_SHEET_NAME_DOCPROP)
+
+ Dim startRow As Long
+ Dim endRow As Long
+ startRow = mDocPropRowOffset + 1
+ endRow = GetWorkbookNameValueAsLong(logWb, CTOTAL_DOCS_ANALYZED) + mDocPropRowOffset
+
+ GetPreparableFilesFromDocProps wsDocProp, startRow, endRow, fso, myFiles
+
+ GetPrepareFilesToAnalyze = (myFiles.count > 0)
+
+FinalExit:
+ Set wsDocProp = Nothing
+ If Not logWb Is Nothing Then logWb.Close
+ Set logWb = Nothing
+
+ If getAppSpecificApplicationName <> CAPPNAME_EXCEL Then
+ If Not xl Is Nothing Then
+ If xl.Workbooks.count = 0 Then
+ xl.Quit
+ End If
+ End If
+ End If
+ Set xl = Nothing
+
+ Exit Function
+
+HandleErrors:
+ WriteDebug currentFunctionName & " : " & Err.Number & " " & Err.Description & " " & Err.Source
+ Resume FinalExit
+End Function
+
+Function GetPreparableFilesFromDocProps(wsDocProp As Worksheet, startRow As Long, _
+ endRow As Long, fso As FileSystemObject, myFiles As Collection) As Boolean
+ On Error GoTo HandleErrors
+ Dim currentFunctionName As String
+ currentFunctionName = "GetPreparableFilesFromDocProps"
+ GetPreparableFilesFromDocProps = False
+
+ Dim index As Long
+ Dim fileName As String
+ Dim fileExt As String
+ Dim docExt As String
+ Dim templateExt As String
+
+ docExt = getAppSpecificDocExt
+ templateExt = getAppSpecificTemplateExt
+
+ For index = startRow To endRow
+ If GetWorksheetCellValueAsLong(wsDocProp, index, CDOCINFOPREPAREDISSUES) > 0 Then
+ fileName = GetWorksheetCellValueAsString(wsDocProp, index, CDOCINFONAME)
+ fileExt = "." & fso.GetExtensionName(fileName)
+ 'Don't have to worry about search types - just looking at existing results
+ 'so just check both legal extensions for this application
+ If fileExt = docExt Or fileExt = templateExt Then
+ myFiles.Add GetWorksheetCellValueAsString(wsDocProp, index, CDOCINFONAMEANDPATH)
+ End If
+ End If
+ Next index
+
+ GetPreparableFilesFromDocProps = myFiles.count > 0
+FinalExit:
+ Exit Function
+
+HandleErrors:
+ GetPreparableFilesFromDocProps = False
+ WriteDebug currentFunctionName & " : " & Err.Number & " " & Err.Description & " " & Err.Source
+ Resume FinalExit
+End Function
+
+Sub OpenXLSResultFile(resultsFile As String, _
+ resultsTemplate As String, _
+ bNewResultsFile As Boolean, _
+ excelApp As Excel.Application, _
+ resultSheet As Excel.WorkBook)
+
+ On Error GoTo HandleErrors
+ Dim currentFunctionName As String
+ currentFunctionName = "OpenXLSResultFile"
+
+ If getAppSpecificApplicationName = CAPPNAME_EXCEL Then
+ Set excelApp = Application
+ excelApp.Visible = True
+ Else
+ Set excelApp = GetExcelInstance
+ excelApp.Visible = False
+ End If
+
+ If bNewResultsFile Then
+ Set resultSheet = excelApp.Workbooks.Add(Template:=resultsTemplate)
+ Localize_WorkBook resultSheet
+ Else
+ Set resultSheet = excelApp.Workbooks.Open(resultsFile)
+ End If
+
+FinalExit:
+ Exit Sub
+
+HandleErrors:
+ excelApp.DisplayAlerts = False
+ WriteDebug currentFunctionName & " : " & Err.Number & " " & Err.Description & " " & Err.Source
+ Resume FinalExit
+End Sub
+
+Sub CloseXLSResultFile(excelApp As Excel.Application, _
+ resultSheet As Excel.WorkBook)
+
+ On Error Resume Next
+
+ If Not resultSheet Is Nothing Then resultSheet.Close
+ Set resultSheet = Nothing
+
+ If getAppSpecificApplicationName <> CAPPNAME_EXCEL Then
+ If Not excelApp Is Nothing Then
+ excelApp.Visible = True
+ If excelApp.Workbooks.count = 0 Then
+ excelApp.Quit
+ End If
+ End If
+ End If
+ Set excelApp = Nothing
+
+ Exit Sub
+End Sub
+
+Sub WriteXLSOutput(storeToDir As String, resultsFile As String, resultsTemplate As String, _
+ bOverwriteResultsFile As Boolean, bNewResultsFile As Boolean, AnalysedDocs As Collection, _
+ fso As Scripting.FileSystemObject)
+
+ On Error GoTo HandleErrors
+ Dim currentFunctionName As String
+ currentFunctionName = "WriteXLSOutput"
+
+ Dim offsetDocPropRow As Long
+ Dim offsetDocIssuesRow As Long
+ Dim offsetDocIssueDetailsRow As Long
+ Dim offsetDocRefDetailsRow As Long
+
+ Const COVERVIEW_SHEET_IDX = 1
+ Const CDOCLIST_SHEET_IDX = 2
+ Const CISSUES_ANALYSED_SHEET = 3
+ Const CISSUE_DETAILS_SHEET = 4
+ Const CWORD_ISSUES_SHEET = 5
+ Const CEXCEL_ISSUES_SHEET = 6
+ Const CPOWERPOINT_ISSUES_SHEET = 7
+ Const CREFERENCE_ISSUES_SHEET = 8
+
+ 'Begin writing stats to excel
+ Dim xl As Excel.Application
+ If getAppSpecificApplicationName = CAPPNAME_EXCEL Then
+ Set xl = Application
+ xl.Visible = True
+ Else
+ Set xl = GetExcelInstance
+ xl.Visible = False
+ End If
+
+ Dim logWb As WorkBook
+
+ If bNewResultsFile Then
+ Set logWb = xl.Workbooks.Add(Template:=resultsTemplate)
+ Localize_WorkBook logWb
+ Else
+ Set logWb = xl.Workbooks.Open(storeToDir & "\" & resultsFile)
+ End If
+
+ SetupAnalysisResultsVariables logWb, offsetDocPropRow, _
+ offsetDocIssuesRow, offsetDocIssueDetailsRow, offsetDocRefDetailsRow
+
+ ' Iterate through results and write info
+ Dim aAnalysis As DocumentAnalysis
+ Dim row As Long
+ Dim docCounts As DocumentCount
+ Dim templateCounts As DocumentCount
+
+ Dim issuesRow As Long
+ Dim issueDetailsRow As Long
+ Dim refDetailsRow As Long
+
+ Dim wsOverview As Worksheet
+ Dim wsCosts As Worksheet
+ Dim wsPgStats As Worksheet
+ Dim wsIssues As Worksheet
+ Dim wsIssueDetails As Worksheet
+ Dim wsRefDetails As Worksheet
+
+ Set wsOverview = logWb.Sheets(COVERVIEW_SHEET_IDX)
+ Set wsPgStats = logWb.Sheets(CDOCLIST_SHEET_IDX)
+
+ 'Some localized names might be longer than 31 chars, excel doesn't
+ 'allow such names!
+ On Error Resume Next
+ wsOverview.name = RID_STR_COMMON_RESULTS_SHEET_NAME_OVERVIEW
+ wsPgStats.name = RID_STR_COMMON_RESULTS_SHEET_NAME_DOCPROP
+ On Error GoTo HandleErrors
+
+ If InDocPreparation Then
+ Set wsCosts = logWb.Sheets(CISSUES_ANALYSED_SHEET)
+ Dim appName As String
+ appName = getAppSpecificApplicationName
+ Select Case appName
+ Case "Word"
+ Set wsIssues = logWb.Worksheets(CWORD_ISSUES_SHEET)
+ Case "Excel"
+ Set wsIssues = logWb.Worksheets(CEXCEL_ISSUES_SHEET)
+ Case "PowerPoint"
+ Set wsIssues = logWb.Worksheets(CPOWERPOINT_ISSUES_SHEET)
+ Case Default
+ Err.Raise Number:=-1, Description:="BadAppName"
+ End Select
+ Set wsIssueDetails = logWb.Sheets(CISSUE_DETAILS_SHEET)
+ Set wsRefDetails = logWb.Sheets(CREFERENCE_ISSUES_SHEET)
+ issuesRow = 1 + CROWOFFSET + offsetDocIssuesRow
+ issueDetailsRow = 1 + CROWOFFSET + offsetDocIssueDetailsRow
+ refDetailsRow = 1 + CROWOFFSET + offsetDocRefDetailsRow
+ ' localize PAW worksheets
+ Dim wsWordIssues As Worksheet
+ Dim wsExcelIssues As Worksheet
+ Dim wsPowerPointIssues As Worksheet
+ Set wsWordIssues = logWb.Worksheets(CWORD_ISSUES_SHEET)
+ Set wsExcelIssues = logWb.Worksheets(CEXCEL_ISSUES_SHEET)
+ Set wsPowerPointIssues = logWb.Worksheets(CPOWERPOINT_ISSUES_SHEET)
+
+ On Error Resume Next
+ wsCosts.name = RID_STR_COMMON_RESULTS_SHEET_NAME_COSTS
+ wsIssueDetails.name = RID_STR_COMMON_RESULTS_SHEET_NAME_DOCISSUE_DETAILS
+ wsRefDetails.name = RID_STR_COMMON_RESULTS_SHEET_NAME_DOCREF_DETAILS
+ wsWordIssues.name = RID_STR_COMMON_RESULTS_SHEET_NAME_DOCISSUES_WORD
+ wsExcelIssues.name = RID_STR_COMMON_RESULTS_SHEET_NAME_DOCISSUES_EXCEL
+ wsPowerPointIssues.name = RID_STR_COMMON_RESULTS_SHEET_NAME_DOCISSUES_POWERPOINT
+ On Error GoTo HandleErrors
+ End If
+
+ Dim fileName As String
+ Dim macroClasses As DocMacroClassifications
+ Dim issueClasses As DocIssueClassifications
+
+ For row = 1 To AnalysedDocs.count 'Need Row count - so not using Eor Each
+ Set aAnalysis = AnalysedDocs.item(row)
+ fileName = fso.GetFileName(aAnalysis.name)
+
+ If InDocPreparation Then
+ issuesRow = WriteDocIssues(wsIssues, issuesRow, aAnalysis, fileName)
+ issueDetailsRow = _
+ ProcessIssuesAndWriteDocIssueDetails(logWb, wsIssueDetails, issueDetailsRow, aAnalysis, fileName)
+ refDetailsRow = _
+ WriteDocRefDetails(wsRefDetails, refDetailsRow, aAnalysis, fileName)
+ aAnalysis.MacroCosts = getMacroIssueCosts(logWb, aAnalysis)
+ WriteDocProperties wsPgStats, row + offsetDocPropRow, aAnalysis, fileName
+ Else
+ ProcessIssuesForDAW logWb, aAnalysis, fileName
+ WriteDocProperties wsPgStats, row + offsetDocPropRow, aAnalysis, fileName
+ End If
+
+ UpdateAllCounts aAnalysis, docCounts, templateCounts, macroClasses, issueClasses, fso
+
+ Set aAnalysis = Nothing
+ Next row
+
+ ' We change the font used for text box shapes here for the japanese
+ ' version, because office 2000 sometimes displays squares instead of
+ ' chars
+ Dim langStr As String
+ Dim userLCID As Long
+ Dim textSize As Long
+ Dim fontName As String
+
+ userLCID = GetUserDefaultLangID()
+ langStr = GetUserLocaleInfo(userLCID, LOCALE_SISO639LANGNAME)
+
+ If (langStr = "ja") Then
+ WriteDebug currentFunctionName & " : Setting font to MS PGothic for 'ja' locale"
+ fontName = "MS PGothic"
+ textSize = 10
+ Else
+ fontName = "Arial"
+ textSize = CLEGEND_FONT_SIZE
+ End If
+
+ 'DAW - PAW switches
+ If InDocPreparation Then
+ SaveAnalysisResultsVariables logWb, issueDetailsRow - (1 + CROWOFFSET), _
+ refDetailsRow - (1 + CROWOFFSET)
+
+ WriteOverview logWb, docCounts, templateCounts, macroClasses, issueClasses
+
+ SetupPAWResultsSpreadsheet logWb, fontName, textSize
+ WriteIssueCounts logWb
+ Else
+ WriteOverview logWb, docCounts, templateCounts, macroClasses, issueClasses
+
+ 'StartTiming
+ SetupDAWResultsSpreadsheet logWb, fontName, textSize
+ 'EndTiming "SetupDAWResultsSpreadsheet"
+ End If
+
+ SetupPrintRanges logWb, row, issuesRow, issueDetailsRow, refDetailsRow
+
+ If resultsFile <> "" Then
+ 'Overwrite existing results file without prompting
+ If bOverwriteResultsFile Or (Not bNewResultsFile) Then
+ xl.DisplayAlerts = False
+ End If
+
+ logWb.SaveAs fileName:=storeToDir & "\" & resultsFile
+ xl.DisplayAlerts = True
+ End If
+
+FinalExit:
+ If Not xl Is Nothing Then
+ xl.Visible = True
+ End If
+
+ Set wsOverview = Nothing
+ Set wsPgStats = Nothing
+
+ If InDocPreparation Then
+ Set wsCosts = Nothing
+ Set wsIssues = Nothing
+ Set wsIssueDetails = Nothing
+ Set wsRefDetails = Nothing
+ End If
+
+ If Not logWb Is Nothing Then logWb.Close
+ Set logWb = Nothing
+
+ If getAppSpecificApplicationName <> CAPPNAME_EXCEL Then
+ If Not xl Is Nothing Then
+ If xl.Workbooks.count = 0 Then
+ xl.Quit
+ End If
+ End If
+ End If
+ Set xl = Nothing
+
+ Exit Sub
+
+HandleErrors:
+ xl.DisplayAlerts = False
+
+ WriteDebug currentFunctionName & " : " & Err.Number & " " & Err.Description & " " & Err.Source
+ Resume FinalExit
+End Sub
+
+Public Sub StartTiming()
+ mTstart = 0
+ mTend = 0
+ mTstart = GetTickCount()
+End Sub
+Public Sub EndTiming(what As String)
+ mTend = GetTickCount()
+ WriteDebug "Timing: " & what & ": " & (FormatNumber((mTend - mTstart) / 1000, 0) & " seconds")
+ mTstart = 0
+ mTend = 0
+End Sub
+Sub WriteIssueCounts(logWb As WorkBook)
+ On Error GoTo HandleErrors
+ Dim currentFunctionName As String
+ currentFunctionName = "WriteIssueCounts"
+
+ Dim Str As String
+ Dim str1 As String
+ Dim val1 As Long
+ Dim count As Long
+ Dim vKeyArray As Variant
+ Dim vItemArray As Variant
+ Dim vPrepKeyArray As Variant
+ Dim vPrepItemArray As Variant
+
+ vKeyArray = mIssuesDict.Keys
+ vItemArray = mIssuesDict.Items
+
+ vPrepKeyArray = mPreparedIssuesDict.Keys
+ vPrepItemArray = mPreparedIssuesDict.Items
+
+ 'Write Issue Counts across all Documents
+ For count = 0 To mIssuesDict.count - 1
+ str1 = vKeyArray(count)
+ val1 = CInt(vItemArray(count))
+ logWb.Names(str1).RefersToRange.Cells(1, 1) = _
+ logWb.Names(str1).RefersToRange.Cells(1, 1).value + vItemArray(count)
+ 'DEBUG: str = str & "Key: " & str1 & " Value: " & val1 & vbLf
+ Next count
+
+ 'Write Prepared Issues Counts across all Documents
+ For count = 0 To mPreparedIssuesDict.count - 1
+ str1 = vPrepKeyArray(count)
+ val1 = CInt(vPrepItemArray(count))
+ AddVariantToWorkbookNameValue logWb, str1, vPrepItemArray(count)
+ 'DEBUG: str = str & "Key: " & str1 & " Value: " & val1 & vbLf
+ Next count
+
+ 'User Form control type count across all analyzed documents of this type
+ str1 = getAppSpecificApplicationName & "_" & _
+ CSTR_ISSUE_VBA_MACROS & "_" & _
+ CSTR_SUBISSUE_PROPERTIES & "_" & _
+ CSTR_SUBISSUE_VBA_MACROS_USERFORMS_CONTROLTYPE_COUNT
+ SetWorkbookNameValueToLong logWb, str1, mUserFormTypesDict.count
+
+ 'Add list of User Form controls and counts to ...USERFORMS_CONTROLTYPE_COUNT field
+ If mUserFormTypesDict.count > 0 Then
+ vKeyArray = mUserFormTypesDict.Keys
+ vItemArray = mUserFormTypesDict.Items
+
+ Str = RID_STR_COMMON_ATTRIBUTE_CONTROLS & ": "
+ For count = 0 To mUserFormTypesDict.count - 1
+ Str = Str & vbLf & vKeyArray(count) & " " & vItemArray(count)
+ Next count
+ WriteUserFromControlTypesComment logWb, str1, Str
+ End If
+ 'DEBUG: MsgBox str & vbLf & mIssuesDict.count
+
+ WriteUniqueModuleCount logWb
+
+FinalExit:
+ Exit Sub
+
+HandleErrors:
+ WriteDebug currentFunctionName & _
+ " : logging costs : " & _
+ Err.Number & " " & Err.Description & " " & Err.Source
+ Resume FinalExit
+End Sub
+Sub WriteUniqueModuleCount(logWb As WorkBook)
+ On Error GoTo HandleErrors
+ Dim currentFunctionName As String
+ currentFunctionName = "WriteUniqueModuleCount"
+
+ Dim strLabel As String
+ Dim uniqueLineCount As Long
+ Dim uniqueModuleCount As Long
+ Dim count As Long
+ Dim vItemArray As Variant
+
+ vItemArray = mMacroDict.Items
+
+ 'Write Issues Costs
+ uniqueLineCount = 0
+ For count = 0 To mMacroDict.count - 1
+ uniqueLineCount = uniqueLineCount + CInt(vItemArray(count))
+ Next count
+ uniqueModuleCount = mMacroDict.count
+
+
+ strLabel = getAppSpecificApplicationName & "_" & _
+ CSTR_ISSUE_VBA_MACROS & "_" & _
+ CSTR_SUBISSUE_PROPERTIES & "_" & _
+ CSTR_SUBISSUE_VBA_MACROS_UNIQUE_MODULE_COUNT
+ SetWorkbookNameValueToLong logWb, strLabel, uniqueModuleCount
+
+ strLabel = getAppSpecificApplicationName & "_" & _
+ CSTR_ISSUE_VBA_MACROS & "_" & _
+ CSTR_SUBISSUE_PROPERTIES & "_" & _
+ CSTR_SUBISSUE_VBA_MACROS_UNIQUE_LINE_COUNT
+ SetWorkbookNameValueToLong logWb, strLabel, uniqueLineCount
+
+FinalExit:
+ Exit Sub
+
+HandleErrors:
+ WriteDebug currentFunctionName & _
+ " : logging Unique Module/ Line Counts : " & _
+ Err.Number & " " & Err.Description & " " & Err.Source
+ Resume FinalExit
+End Sub
+
+Sub WriteUserFromControlTypesComment(logWb As WorkBook, name As String, comment As String)
+ On Error GoTo HandleErrors
+ Dim currentFunctionName As String
+ currentFunctionName = "WriteUserFromControlTypesComment"
+
+ On Error Resume Next 'Ignore error if trying to add comment again - would happen on append to results
+ logWb.Names(name).RefersToRange.Cells(1, 1).AddComment
+
+ On Error GoTo HandleErrors
+ logWb.Names(name).RefersToRange.Cells(1, 1).comment.Text Text:=comment
+ 'Autosize not supported - Office 2000
+ 'logWb.Names(name).RefersToRange.Cells(1, 1).comment.AutoSize = True
+ logWb.Names(name).RefersToRange.Cells(1, 1).comment.Visible = False
+
+FinalExit:
+ Exit Sub
+
+HandleErrors:
+ WriteDebug currentFunctionName & _
+ " : name : " & name & _
+ " : comment : " & comment & _
+ Err.Number & " " & Err.Description & " " & Err.Source
+ Resume FinalExit
+End Sub
+
+Sub UpdateAllCounts(aAnalysis As DocumentAnalysis, counts As DocumentCount, templateCounts As DocumentCount, _
+ macroClasses As DocMacroClassifications, issueClasses As DocIssueClassifications, _
+ fso As FileSystemObject)
+ Const CMODDATE_LESS3MONTHS = 91
+ Const CMODDATE_LESS6MONTHS = 182
+ Const CMODDATE_LESS12MONTHS = 365
+
+ On Error GoTo HandleErrors
+ Dim currentFunctionName As String
+ currentFunctionName = "UpdateAllCounts"
+ 'DocIssue Classification occurs in setDocOverallIssueClassification under
+ ' ProcessIssuesAndWriteDocIssueDetails when all DocIssues are being traversed.
+ 'MacroClass for the Doc is setup at the end of the Analyze_Macros in DoAnalysis
+ 'Mod Dates are determined in SetDocProperties in DoAnalysis
+
+ 'DocMacroClassifications
+ Select Case aAnalysis.MacroOverallClass
+ Case enMacroComplex
+ macroClasses.complex = macroClasses.complex + 1
+ Case enMacroMedium
+ macroClasses.Medium = macroClasses.Medium + 1
+ Case enMacroSimple
+ macroClasses.Simple = macroClasses.Simple + 1
+ Case Else
+ macroClasses.None = macroClasses.None + 1
+ End Select
+
+ 'DocIssueClassifications
+ aAnalysis.BelowIssuesLimit = True
+ Select Case aAnalysis.DocOverallIssueClass
+ Case enComplex
+ issueClasses.complex = issueClasses.complex + 1
+ Case enMinor
+ issueClasses.Minor = issueClasses.Minor + 1
+ Case Else
+ issueClasses.None = issueClasses.None + 1
+ End Select
+
+ 'DocumentCounts
+ Dim extStr As String
+ extStr = "." & LCase(fso.GetExtensionName(aAnalysis.name))
+ If extStr = getAppSpecificDocExt Then
+ UpdateDocCounts counts, aAnalysis
+ ElseIf extStr = getAppSpecificTemplateExt Then
+ UpdateDocCounts templateCounts, aAnalysis
+ Else
+ WriteDebug currentFunctionName & " : path " & aAnalysis.name & _
+ ": unhandled file extesnion " & extStr & " : " & Err.Number & " " & Err.Description & " " & Err.Source
+ End If
+
+FinalExit:
+ Exit Sub
+
+HandleErrors:
+ WriteDebug currentFunctionName & " : path " & aAnalysis.name & ": " & Err.Number & " " & Err.Description & " " & Err.Source
+ Resume FinalExit
+End Sub
+Sub UpdateDocCounts(counts As DocumentCount, aAnalysis As DocumentAnalysis)
+ On Error GoTo HandleErrors
+ Dim currentFunctionName As String
+ currentFunctionName = "UpdateDocCounts"
+
+ counts.numDocsAnalyzed = counts.numDocsAnalyzed + 1
+ If aAnalysis.IssuesCount > 0 Then 'During Analysis incremented
+ counts.numDocsAnalyzedWithIssues = counts.numDocsAnalyzedWithIssues + 1
+
+ If aAnalysis.BelowIssuesLimit Then
+ counts.numMinorIssues = _
+ counts.numMinorIssues + aAnalysis.MinorIssuesCount
+ 'MinorIssuesCount incemented as all DocIssues are being traversed are being written out - ProcessIssuesAndWriteDocIssueDetails
+ counts.numComplexIssues = counts.numComplexIssues + aAnalysis.ComplexIssuesCount 'Calculated
+ counts.totalDocIssuesCosts = counts.totalDocIssuesCosts + _
+ aAnalysis.DocIssuesCosts
+ counts.totalPreparableIssuesCosts = counts.totalPreparableIssuesCosts + _
+ aAnalysis.PreparableIssuesCosts
+ End If
+
+ counts.numMacroIssues = counts.numMacroIssues + aAnalysis.MacroIssuesCount 'During Analysis incremented
+ counts.totalMacroCosts = counts.totalMacroCosts + aAnalysis.MacroCosts
+ End If
+
+FinalExit:
+ Exit Sub
+
+HandleErrors:
+ WriteDebug currentFunctionName & " : path " & aAnalysis.name & ": " & Err.Number & " " & Err.Description & " " & Err.Source
+ Resume FinalExit
+End Sub
+
+
+Sub WriteDocProperties(wsPgStats As Worksheet, row As Long, aAnalysis As DocumentAnalysis, _
+ fileName As String)
+ On Error GoTo HandleErrors
+ Dim currentFunctionName As String
+ currentFunctionName = "WriteDocProperties"
+
+ Dim rowIndex As Long
+ rowIndex = row + mDocPropRowOffset
+
+ If aAnalysis.Application = RID_STR_COMMON_CANNOT_OPEN Then
+ SetWorksheetCellValueToString wsPgStats, rowIndex, CDOCINFONAME, fileName
+ SetWorksheetCellValueToString wsPgStats, rowIndex, CDOCINFOAPPLICATION, aAnalysis.Application
+ SetWorksheetCellValueToString wsPgStats, rowIndex, CDOCINFONAMEANDPATH, aAnalysis.name
+
+ GoTo FinalExit
+ End If
+
+ If InDocPreparation Then
+ SetWorksheetCellValueToString wsPgStats, rowIndex, CDOCINFONAME, fileName
+ SetWorksheetCellValueToString wsPgStats, rowIndex, CDOCINFOAPPLICATION, aAnalysis.Application
+
+ SetWorksheetCellValueToLong wsPgStats, rowIndex, CDOCINFODOCISSUECOSTS, aAnalysis.DocIssuesCosts
+ SetWorksheetCellValueToLong wsPgStats, rowIndex, CDOCINFOPREPARABLEISSUECOSTS, aAnalysis.PreparableIssuesCosts
+ SetWorksheetCellValueToLong wsPgStats, rowIndex, CDOCINFOMACROISSUECOSTS, aAnalysis.MacroCosts
+
+ SetWorksheetCellValueToString wsPgStats, rowIndex, CDOCINFOISSUE_CLASS, _
+ getDocOverallIssueClassificationAsString(aAnalysis.DocOverallIssueClass)
+ SetWorksheetCellValueToLong wsPgStats, rowIndex, CDOCINFOCOMPLEXISSUES, aAnalysis.ComplexIssuesCount
+ SetWorksheetCellValueToLong wsPgStats, rowIndex, CDOCINFOMINORISSUES, aAnalysis.MinorIssuesCount
+ SetWorksheetCellValueToLong wsPgStats, rowIndex, CDOCINFOPREPAREDISSUES, aAnalysis.PreparableIssuesCount
+
+ SetWorksheetCellValueToString wsPgStats, rowIndex, CDOCINFOMACRO_CLASS, _
+ getDocOverallMacroClassAsString(aAnalysis.MacroOverallClass)
+ SetWorksheetCellValueToLong wsPgStats, rowIndex, CDOCINFOMACRO_USERFORMS, aAnalysis.MacroNumUserForms
+ SetWorksheetCellValueToLong wsPgStats, rowIndex, CDOCINFOMACRO_LINESOFCODE, aAnalysis.MacroTotalNumLines
+
+ SetWorksheetCellValueToLong wsPgStats, rowIndex, CDOCINFONUMBERPAGES, aAnalysis.PageCount
+ SetWorksheetCellValueToVariant wsPgStats, rowIndex, CDOCINFOCREATED, CheckDate(aAnalysis.Created)
+ SetWorksheetCellValueToVariant wsPgStats, rowIndex, CDOCINFOLASTMODIFIED, CheckDate(aAnalysis.Modified)
+ SetWorksheetCellValueToVariant wsPgStats, rowIndex, CDOCINFOLASTACCESSED, CheckDate(aAnalysis.Accessed)
+ SetWorksheetCellValueToVariant wsPgStats, rowIndex, CDOCINFOLASTPRINTED, CheckDate(aAnalysis.Printed)
+
+ SetWorksheetCellValueToString wsPgStats, rowIndex, CDOCINFOLASTSAVEDBY, aAnalysis.SavedBy
+ SetWorksheetCellValueToString wsPgStats, rowIndex, CDOCINFOREVISION, aAnalysis.Revision
+ SetWorksheetCellValueToString wsPgStats, rowIndex, CDOCINFOTEMPLATE, aAnalysis.Template
+ SetWorksheetCellValueToString wsPgStats, rowIndex, CDOCINFONAMEANDPATH, aAnalysis.name
+ Else
+ SetWorksheetCellValueToString wsPgStats, rowIndex, CDOCINFONAME, fileName
+ SetWorksheetCellValueToString wsPgStats, rowIndex, CDOCINFOAPPLICATION, aAnalysis.Application
+ SetWorksheetCellValueToString wsPgStats, rowIndex, CDOCINFOISSUE_CLASS, _
+ getDocOverallIssueClassificationAsString(aAnalysis.DocOverallIssueClass)
+ SetWorksheetCellValueToString wsPgStats, rowIndex, CDOCINFOMACRO_CLASS, _
+ getDocOverallMacroClassAsString(aAnalysis.MacroOverallClass)
+ SetWorksheetCellValueToVariant wsPgStats, rowIndex, CDOCINFOLASTMODIFIED, CheckDate(aAnalysis.Modified)
+ SetWorksheetCellValueToString wsPgStats, rowIndex, CDOCINFONAMEANDPATH, aAnalysis.name
+ End If
+
+FinalExit:
+ Exit Sub
+
+HandleErrors:
+ WriteDebug currentFunctionName & " : path " & aAnalysis.name & " : " & Err.Number & " " & Err.Description & " " & Err.Source
+ Resume FinalExit
+End Sub
+Function CheckDate(myDate As Date) As Variant
+ On Error GoTo HandleErrors
+ Dim currentFunctionName As String
+ currentFunctionName = "CheckDate"
+
+ Dim lowerNTDateLimit As Date
+ If Not IsDate(myDate) Then
+ CheckDate = RID_STR_COMMON_NA
+ Exit Function
+ End If
+
+ lowerNTDateLimit = DateSerial(1980, 1, 1)
+ CheckDate = IIf(myDate < lowerNTDateLimit, RID_STR_COMMON_NA, myDate)
+FinalExit:
+ Exit Function
+
+HandleErrors:
+ WriteDebug currentFunctionName & " : date " & myDate & " : " & Err.Number & " " & Err.Description & " " & Err.Source
+ Resume FinalExit
+End Function
+
+Function WriteDocIssues(wsIssues As Worksheet, row As Long, _
+ aAnalysis As DocumentAnalysis, fileName As String) As Long
+ On Error GoTo HandleErrors
+ Dim currentFunctionName As String
+ currentFunctionName = "WriteDocIssues"
+
+ Const CNAME = 1
+ Const CAPPLICATION = CNAME + 1
+ Const CISSUE_COLUMNOFFSET = CAPPLICATION
+
+ If aAnalysis.IssuesCount = 0 Then
+ WriteDocIssues = row
+ Exit Function
+ End If
+ SetWorksheetCellValueToString wsIssues, row, CNAME, fileName
+ SetWorksheetCellValueToString wsIssues, row, CAPPLICATION, aAnalysis.Application
+
+ Dim index As Integer
+ For index = 1 To aAnalysis.TotalIssueTypes
+ If aAnalysis.IssuesCountArray(index) > 0 Then
+ SetWorksheetCellValueToString wsIssues, row, CISSUE_COLUMNOFFSET + index, aAnalysis.IssuesCountArray(index)
+ End If
+ Next index
+ SetWorksheetCellValueToString wsIssues, row, CISSUE_COLUMNOFFSET + aAnalysis.TotalIssueTypes + 1, aAnalysis.name
+
+ WriteDocIssues = row + 1
+FinalExit:
+ Exit Function
+
+HandleErrors:
+ WriteDebug currentFunctionName & " : path " & aAnalysis.name & " : " & Err.Number & " " & Err.Description & " " & Err.Source
+ Resume FinalExit
+End Function
+Sub ProcessIssuesForDAW(logWb As WorkBook, aAnalysis As DocumentAnalysis, fileName As String)
+ On Error GoTo HandleErrors
+ Dim currentFunctionName As String
+ currentFunctionName = "ProcessIssuesForDAW"
+
+ Dim myIssue As IssueInfo
+ Dim issueClass As EnumDocOverallIssueClass
+
+ Dim index As Integer
+ For index = 1 To aAnalysis.Issues.count
+ Set myIssue = aAnalysis.Issues(index)
+
+ If Not isMacroIssue(myIssue) Then
+ issueClass = getDocIssueClassification(logWb, myIssue)
+ CountDocIssuesForDoc issueClass, aAnalysis
+ SetOverallDocIssueClassification issueClass, aAnalysis
+ End If
+
+ Set myIssue = Nothing
+ Next index
+
+FinalExit:
+ Exit Sub
+
+HandleErrors:
+ WriteDebug currentFunctionName & " : path " & aAnalysis.name & ": " & Err.Number & " " & Err.Description & " " & Err.Source
+ Resume FinalExit
+End Sub
+
+Function ProcessIssuesAndWriteDocIssueDetails(logWb As WorkBook, wsIssueDetails As Worksheet, DetailsRow As Long, _
+ aAnalysis As DocumentAnalysis, fileName As String) As Long
+ On Error GoTo HandleErrors
+ Dim currentFunctionName As String
+ currentFunctionName = "ProcessIssueAndWriteDocIssueDetails"
+
+ Dim myIssue As IssueInfo
+ Dim rowIndex As Long
+ Dim issueClass As EnumDocOverallIssueClass
+ Dim issueCost As Long
+
+ rowIndex = DetailsRow
+
+ Dim index As Integer
+ For index = 1 To aAnalysis.Issues.count
+ Set myIssue = aAnalysis.Issues(index)
+
+ ' Process Document Issues and Costs for the Document
+ ' Will be output to List of Documents sheet by WriteDocProperties( )
+ If Not isMacroIssue(myIssue) Then
+ issueClass = getDocIssueClassification(logWb, myIssue)
+ CountDocIssuesForDoc issueClass, aAnalysis
+ SetOverallDocIssueClassification issueClass, aAnalysis
+ issueCost = getDocIssueCost(logWb, aAnalysis, myIssue)
+ aAnalysis.DocIssuesCosts = aAnalysis.DocIssuesCosts + issueCost
+ If myIssue.Preparable Then
+ aAnalysis.PreparableIssuesCosts = aAnalysis.PreparableIssuesCosts + issueCost
+ End If
+ End If
+
+ 'Collate Issue and Factor counts across all Documents
+ 'Will be output to the Issues Analyzed sheet by WriteIssueCounts( )
+ CollateIssueAndFactorCountsAcrossAllDocs aAnalysis, myIssue, fileName
+
+ OutputCommonIssueDetails wsIssueDetails, rowIndex, aAnalysis, myIssue, fileName
+ OutputCommonIssueAttributes wsIssueDetails, rowIndex, myIssue
+ rowIndex = rowIndex + 1
+ Set myIssue = Nothing
+ Next index
+
+ ProcessIssuesAndWriteDocIssueDetails = rowIndex
+
+FinalExit:
+ Exit Function
+
+HandleErrors:
+ WriteDebug currentFunctionName & " : path " & aAnalysis.name & ": " & Err.Number & " " & Err.Description & " " & Err.Source
+ Resume FinalExit
+End Function
+
+Function getDocIssueCost(logWb As WorkBook, aAnalysis As DocumentAnalysis, myIssue As IssueInfo) As Long
+ On Error GoTo HandleErrors
+ Dim currentFunctionName As String
+ currentFunctionName = "getDocIssueCost"
+
+ Dim issueKey As String
+ Dim ret As Long
+ ret = 0
+
+ issueKey = getAppSpecificApplicationName & "_" & myIssue.IssueTypeXML & "_" & myIssue.SubTypeXML
+
+ ret = getIssueValueFromXLSorDict(logWb, aAnalysis, mIssuesCostDict, issueKey, 1, CCOST_COL_OFFSET)
+
+FinalExit:
+ getDocIssueCost = ret
+ Exit Function
+
+HandleErrors:
+ ret = 0
+ WriteDebug currentFunctionName & " : path " & aAnalysis.name & ": " & Err.Number & " " & Err.Description & " " & Err.Source
+ Resume FinalExit
+End Function
+Function getMacroIssueCosts(logWb As WorkBook, aAnalysis As DocumentAnalysis) As Long
+ 'Error handling not required
+ getMacroIssueCosts = getVBAMacroIssueCost(logWb, aAnalysis) '+ getMacroExtRefIssueCost(logWb, aAnalysis)
+ 'NOTE: Currently not counting External Refs as Macro Cost
+ 'could be added if porting off Windows
+
+End Function
+
+Function getVBAMacroIssueCost(logWb As WorkBook, aAnalysis As DocumentAnalysis) As Long
+ Const CMACRO_ROW_OFFSET_UNIQUE_LINES_COST = 4
+ Const CMACRO_ROW_OFFSET_USER_FORMS_COUNT_COST = 5
+ Const CMACRO_ROW_OFFSET_USER_FORMS_CONTROL_COUNT_COST = 6
+ Const CMACRO_ROW_OFFSET_USER_FORMS_CONTROL_TYPE_COUNT_COST = 7
+
+ Const CMACRO_NUM_OF_LINES_FACTOR_KEY = "_UniqueLineCount"
+ Const CMACRO_USER_FORMS_COUNT_FACTOR_KEY = "_UserFormsCount"
+ Const CMACRO_USER_FORMS_CONTROL_COUNT_FACTOR_KEY = "_UserFormsControlCount"
+ Const CMACRO_USER_FORMS_CONTROL_TYPE_COUNT_FACTOR_KEY = "_UserFormsControlTypeCount"
+
+ On Error GoTo HandleErrors
+ Dim currentFunctionName As String
+ currentFunctionName = "getVBAMacroIssueCost"
+
+ Dim baseIssueKey As String
+ Dim ret As Long
+ ret = 0
+
+ If Not aAnalysis.HasMacros Then GoTo FinalExit
+
+ 'Fetch VBA Macro Cost Factors - if required
+ baseIssueKey = getAppSpecificApplicationName & "_" & CSTR_ISSUE_VBA_MACROS & "_" & CSTR_SUBISSUE_PROPERTIES
+
+ 'Num Lines - Costing taken from "Lines in Unique Modules"
+ If aAnalysis.MacroTotalNumLines > 0 Then
+ ret = ret + aAnalysis.MacroTotalNumLines * _
+ getValueFromXLSorDict(logWb, aAnalysis, mIssuesCostDict, _
+ baseIssueKey & CMACRO_NUM_OF_LINES_FACTOR_KEY, baseIssueKey, _
+ CMACRO_ROW_OFFSET_UNIQUE_LINES_COST, CCOST_COL_OFFSET)
+ End If
+ 'User Forms Count
+ If aAnalysis.MacroNumUserForms > 0 Then
+ ret = ret + aAnalysis.MacroNumUserForms * _
+ getValueFromXLSorDict(logWb, aAnalysis, mIssuesCostDict, _
+ baseIssueKey & CMACRO_USER_FORMS_COUNT_FACTOR_KEY, baseIssueKey, _
+ CMACRO_ROW_OFFSET_USER_FORMS_COUNT_COST, CCOST_COL_OFFSET)
+ End If
+ 'User Forms Control Count
+ If aAnalysis.MacroNumUserFormControls > 0 Then
+ ret = ret + aAnalysis.MacroNumUserFormControls * _
+ getValueFromXLSorDict(logWb, aAnalysis, mIssuesCostDict, _
+ baseIssueKey & CMACRO_USER_FORMS_CONTROL_COUNT_FACTOR_KEY, baseIssueKey, _
+ CMACRO_ROW_OFFSET_USER_FORMS_CONTROL_COUNT_COST, CCOST_COL_OFFSET)
+ End If
+ 'User Forms Control Type Count
+ If aAnalysis.MacroNumUserFormControlTypes > 0 Then
+ ret = ret + aAnalysis.MacroNumUserFormControlTypes * getValueFromXLSorDict(logWb, aAnalysis, mIssuesCostDict, _
+ baseIssueKey & CMACRO_USER_FORMS_CONTROL_TYPE_COUNT_FACTOR_KEY, baseIssueKey, CMACRO_ROW_OFFSET_USER_FORMS_CONTROL_TYPE_COUNT_COST, CCOST_COL_OFFSET)
+ End If
+
+
+FinalExit:
+ getVBAMacroIssueCost = ret
+ Exit Function
+
+HandleErrors:
+ ret = 0
+ WriteDebug currentFunctionName & " : path " & aAnalysis.name & ": " & Err.Number & " " & Err.Description & " " & Err.Source
+ Resume FinalExit
+End Function
+Function getMacroExtRefIssueCost(logWb As WorkBook, aAnalysis As DocumentAnalysis) As Long
+ Const CMACRO_ROW_OFFSET_NUM_EXTERNAL_REFS_COST = 2
+ Const CMACRO_NUM_EXTERNAL_REFS_FACTOR_KEY = "_ExternalRefs"
+
+ On Error GoTo HandleErrors
+ Dim currentFunctionName As String
+ currentFunctionName = "getMacroExtRefIssueCost"
+ Dim baseIssueKey As String
+ Dim ret As Long
+ ret = 0
+
+ If aAnalysis.MacroNumExternalRefs <= 0 Then GoTo FinalExit
+
+ 'Fetch External Ref Cost Factors
+ baseIssueKey = getAppSpecificApplicationName & "_" & CSTR_ISSUE_PORTABILITY & "_" & _
+ CSTR_SUBISSUE_EXTERNAL_REFERENCES_IN_MACRO
+ ret = ret + aAnalysis.MacroNumExternalRefs * _
+ getValueFromXLSorDict(logWb, aAnalysis, mIssuesCostDict, _
+ baseIssueKey & CMACRO_NUM_EXTERNAL_REFS_FACTOR_KEY, baseIssueKey, _
+ CMACRO_ROW_OFFSET_NUM_EXTERNAL_REFS_COST, CCOST_COL_OFFSET)
+
+FinalExit:
+ getMacroExtRefIssueCost = ret
+ Exit Function
+
+HandleErrors:
+ ret = 0
+ WriteDebug currentFunctionName & " : path " & aAnalysis.name & ": " & Err.Number & " " & Err.Description & " " & Err.Source
+ Resume FinalExit
+End Function
+Function getIssueValueFromXLSorDict(logWb As WorkBook, aAnalysis As DocumentAnalysis, dict As Scripting.Dictionary, _
+ key As String, row As Long, column As Long) As Long
+ 'Error handling not required
+ getIssueValueFromXLSorDict = getValueFromXLSorDict(logWb, aAnalysis, dict, key, key, row, column)
+End Function
+
+Function getValueFromXLSorDict(logWb As WorkBook, aAnalysis As DocumentAnalysis, dict As Scripting.Dictionary, _
+ dictKey As String, xlsKey As String, row As Long, column As Long) As Long
+ On Error GoTo HandleErrors
+ Dim currentFunctionName As String
+ currentFunctionName = "getValueFromXLSorDict"
+
+ Dim ret As Long
+ ret = 0
+
+ If dict.Exists(dictKey) Then
+ ret = dict.item(dictKey)
+ Else
+ On Error Resume Next
+ ret = logWb.Names(xlsKey).RefersToRange.Cells(row, column).value
+ 'Log as error missing key
+ If Err.Number <> 0 Then
+ WriteDebug currentFunctionName & _
+ " : Issue Cost Key - " & xlsKey & ": label missing from results.xlt Costs sheet, check sheet and add/ check spelling label" & Err.Number & " " & Err.Description & " " & Err.Source
+ WriteDebug currentFunctionName & " : dictKey " & dictKey & " : xlsKey " & xlsKey & " : " & Err.Number & " " & Err.Description & " " & Err.Source
+ ret = 0
+ End If
+ On Error GoTo HandleErrors
+ dict.Add dictKey, ret
+ End If
+
+FinalExit:
+ getValueFromXLSorDict = ret
+ Exit Function
+
+HandleErrors:
+ ret = 0
+ WriteDebug currentFunctionName & " : path " & aAnalysis.name & ": " & Err.Number & " " & Err.Description & " " & Err.Source
+ Resume FinalExit
+End Function
+Function isMacroIssue(myIssue As IssueInfo)
+ 'Error handling not required
+ isMacroIssue = False
+
+ If myIssue.IssueTypeXML = CSTR_ISSUE_VBA_MACROS Or _
+ (myIssue.IssueTypeXML = CSTR_ISSUE_PORTABILITY And _
+ myIssue.SubTypeXML = CSTR_SUBISSUE_EXTERNAL_REFERENCES_IN_MACRO) Then
+ isMacroIssue = True
+ End If
+End Function
+Sub CountDocIssuesForDoc(issueClass As EnumDocOverallIssueClass, aAnalysis As DocumentAnalysis)
+ 'Error handling not required
+
+ If issueClass = enMinor Then
+ aAnalysis.MinorIssuesCount = aAnalysis.MinorIssuesCount + 1
+ End If
+ ' Macro issues are counted during analysis
+ ' Complex issues is calculated from: mIssues.count - mMinorIssuesCount - mMacroIssuesCount
+End Sub
+Sub SetOverallDocIssueClassification(issueClass As EnumDocOverallIssueClass, aAnalysis As DocumentAnalysis)
+ 'Error handling not required
+
+ If aAnalysis.DocOverallIssueClass = enComplex Then Exit Sub
+
+ If issueClass = enComplex Then
+ aAnalysis.DocOverallIssueClass = enComplex
+ Else
+ aAnalysis.DocOverallIssueClass = enMinor
+ End If
+End Sub
+Function getDocIssueClassification(logWb As WorkBook, myIssue As IssueInfo) As EnumDocOverallIssueClass
+ On Error GoTo HandleErrors
+ Dim currentFunctionName As String
+ currentFunctionName = "getDocIssueClassification"
+ Dim issueKey As String
+ Dim bRet As Boolean
+ bRet = False
+ getDocIssueClassification = enMinor
+
+ issueKey = getAppSpecificApplicationName & "_" & myIssue.IssueTypeXML & "_" & myIssue.SubTypeXML
+ If mIssuesClassificationDict.Exists(issueKey) Then
+ bRet = mIssuesClassificationDict.item(issueKey)
+ Else
+ On Error Resume Next
+ bRet = logWb.Names(issueKey).RefersToRange.Cells(1, 0).value
+ 'Log as error missing key
+ If Err.Number <> 0 Then
+ WriteDebug currentFunctionName & _
+ " : Issue Cost Key - " & issueKey & ": label missing from results.xlt Costs sheet, check sheet and add/ check spelling label" & Err.Number & " " & Err.Description & " " & Err.Source
+ bRet = False
+ End If
+ On Error GoTo HandleErrors
+ mIssuesClassificationDict.Add issueKey, bRet
+ End If
+
+
+FinalExit:
+ If bRet Then
+ getDocIssueClassification = enComplex
+ End If
+ Exit Function
+
+HandleErrors:
+ bRet = False
+ WriteDebug currentFunctionName & " : issueKey " & issueKey & ": " & Err.Number & " " & Err.Description & " " & Err.Source
+ Resume FinalExit
+End Function
+
+Function getDocOverallIssueClassificationAsString(docIssueClass As EnumDocOverallIssueClass) As String
+ Dim Str As String
+ 'Error handling not required
+
+ Select Case docIssueClass
+ Case enComplex
+ Str = RID_STR_COMMON_ISSUE_CLASS_COMPLEX
+ Case enMinor
+ Str = RID_STR_COMMON_ISSUE_CLASS_MINOR
+ Case Else
+ Str = RID_STR_COMMON_ISSUE_CLASS_NONE
+ End Select
+
+ getDocOverallIssueClassificationAsString = Str
+End Function
+
+Public Function getDocOverallMacroClassAsString(docMacroClass As EnumDocOverallMacroClass) As String
+ Dim Str As String
+ 'Error handling not required
+
+ Select Case docMacroClass
+ Case enMacroComplex
+ Str = RID_STR_COMMON_MACRO_CLASS_COMPLEX
+ Case enMacroMedium
+ Str = RID_STR_COMMON_MACRO_CLASS_MEDIUM
+ Case enMacroSimple
+ Str = RID_STR_COMMON_MACRO_CLASS_SIMPLE
+ Case Else
+ Str = RID_STR_COMMON_MACRO_CLASS_NONE
+ End Select
+
+ getDocOverallMacroClassAsString = Str
+End Function
+
+Function WriteDocRefDetails(wsRefDetails As Worksheet, DetailsRow As Long, _
+ aAnalysis As DocumentAnalysis, fileName As String) As Long
+ On Error GoTo HandleErrors
+ Dim currentFunctionName As String
+ currentFunctionName = "WriteDocRefDetails"
+
+ Dim myIssue As IssueInfo
+ Dim rowIndex As Long
+ rowIndex = DetailsRow
+
+ Dim index As Integer
+
+ 'Output References for Docs with Macros
+ If aAnalysis.HasMacros And (aAnalysis.References.count > 0) Then
+ For index = 1 To aAnalysis.References.count
+ Set myIssue = aAnalysis.References(index)
+ OutputReferenceAttributes wsRefDetails, rowIndex, aAnalysis, myIssue, fileName
+ rowIndex = rowIndex + 1
+ Set myIssue = Nothing
+ Next index
+ End If
+
+ WriteDocRefDetails = rowIndex
+
+FinalExit:
+ Exit Function
+
+HandleErrors:
+ WriteDebug currentFunctionName & _
+ " : path " & aAnalysis.name & ": " & _
+ " : row " & DetailsRow & ": " & _
+ Err.Number & " " & Err.Description & " " & Err.Source
+ Resume FinalExit
+End Function
+Sub OutputReferenceAttributes(wsIssueDetails As Worksheet, rowIndex As Long, _
+ aAnalysis As DocumentAnalysis, myIssue As IssueInfo, fileName As String)
+ On Error GoTo HandleErrors
+ Dim currentFunctionName As String
+ currentFunctionName = "OutputReferenceAttributes"
+
+ Dim strAttributes As String
+
+ With myIssue
+ SetWorksheetCellValueToString wsIssueDetails, rowIndex, CREF_DETDOCNAME, fileName
+ SetWorksheetCellValueToString wsIssueDetails, rowIndex, CREF_DETDOCAPPLICATION, aAnalysis.Application
+
+ strAttributes = .Values(RID_STR_COMMON_ATTRIBUTE_MAJOR) & "." & .Values(RID_STR_COMMON_ATTRIBUTE_MINOR)
+ strAttributes = IIf(strAttributes = "0.0" Or strAttributes = ".", .Values(RID_STR_COMMON_ATTRIBUTE_NAME), _
+ .Values(RID_STR_COMMON_ATTRIBUTE_NAME) & " " & .Values(RID_STR_COMMON_ATTRIBUTE_MAJOR) & _
+ "." & .Values(RID_STR_COMMON_ATTRIBUTE_MINOR))
+ SetWorksheetCellValueToString wsIssueDetails, rowIndex, CREF_DETREFERENCE, strAttributes
+
+ If .Values(RID_STR_COMMON_ATTRIBUTE_TYPE) = RID_STR_COMMON_ATTRIBUTE_PROJECT Then
+ SetWorksheetCellValueToString wsIssueDetails, rowIndex, CREF_DETDESCRIPTION, RID_STR_COMMON_ATTRIBUTE_PROJECT
+ Else
+ SetWorksheetCellValueToString wsIssueDetails, rowIndex, CREF_DETDESCRIPTION, _
+ IIf(.Values(RID_STR_COMMON_ATTRIBUTE_DESCRIPTION) <> "", .Values(RID_STR_COMMON_ATTRIBUTE_DESCRIPTION), RID_STR_COMMON_NA)
+ End If
+
+
+ If .Values(RID_STR_COMMON_ATTRIBUTE_ISBROKEN) <> RID_STR_COMMON_ATTRIBUTE_BROKEN Then
+ SetWorksheetCellValueToString wsIssueDetails, rowIndex, CREF_DETLOCATION, _
+ .Values(RID_STR_COMMON_ATTRIBUTE_FILE)
+ Else
+ SetWorksheetCellValueToString wsIssueDetails, rowIndex, CREF_DETLOCATION, _
+ RID_STR_COMMON_NA
+ End If
+
+ 'Reference Details
+ strAttributes = RID_STR_COMMON_ATTRIBUTE_TYPE & ": " & .Values(RID_STR_COMMON_ATTRIBUTE_TYPE) & vbLf
+ strAttributes = strAttributes & RID_STR_COMMON_ATTRIBUTE_PROPERTIES & ": " & _
+ .Values(RID_STR_COMMON_ATTRIBUTE_BUILTIN) & " " & .Values(RID_STR_COMMON_ATTRIBUTE_ISBROKEN)
+ strAttributes = IIf(.Values(RID_STR_COMMON_ATTRIBUTE_GUID) <> "", _
+ strAttributes & vbLf & RID_STR_COMMON_ATTRIBUTE_GUID & ": " & .Values(RID_STR_COMMON_ATTRIBUTE_GUID), _
+ strAttributes)
+ SetWorksheetCellValueToString wsIssueDetails, rowIndex, CREF_DETATTRIBUTES, strAttributes
+
+ SetWorksheetCellValueToString wsIssueDetails, rowIndex, CREF_DETNAMEANDPATH, aAnalysis.name
+ End With
+FinalExit:
+ Exit Sub
+
+HandleErrors:
+ WriteDebug currentFunctionName & _
+ " : path " & aAnalysis.name & ": " & _
+ " : rowIndex " & rowIndex & ": " & _
+ " : myIssue " & myIssue.IssueTypeXML & "_" & myIssue.SubTypeXML & ": " & _
+ Err.Number & " " & Err.Description & " " & Err.Source
+ Resume FinalExit
+End Sub
+Sub OutputCommonIssueAttributes(wsIssueDetails As Worksheet, rowIndex As Long, _
+ myIssue As IssueInfo)
+ On Error GoTo HandleErrors
+ Dim currentFunctionName As String
+ currentFunctionName = "OutputCommonIssueAttributes"
+
+ Dim index As Integer
+ Dim strAttributes As String
+
+ strAttributes = ""
+ For index = 1 To myIssue.Attributes.count
+ strAttributes = strAttributes & myIssue.Attributes(index) & " - " & _
+ myIssue.Values(index)
+ strAttributes = strAttributes & IIf(index <> myIssue.Attributes.count, vbLf, "")
+
+ Next index
+ SetWorksheetCellValueToString wsIssueDetails, rowIndex, CISSUE_DETATTRIBUTES, strAttributes
+
+FinalExit:
+ Exit Sub
+
+HandleErrors:
+ WriteDebug currentFunctionName & _
+ " : rowIndex " & rowIndex & ": " & _
+ " : myIssue " & myIssue.IssueTypeXML & "_" & myIssue.SubTypeXML & ": " & _
+ Err.Number & " " & Err.Description & " " & Err.Source
+ Resume FinalExit
+End Sub
+'Store issue cost and factor costs across all documents
+Sub CollateIssueAndFactorCountsAcrossAllDocs(aAnalysis As DocumentAnalysis, myIssue As IssueInfo, fileName As String)
+ Const CSTR_USER_FORM = "User Form"
+ On Error GoTo HandleErrors
+ Dim currentFunctionName As String
+ currentFunctionName = "CollateIssueAndFactorCountsAcrossAllDocs"
+
+ 'Don't want to cost ISSUE_INFORMATION issues
+ If myIssue.IssueTypeXML = CSTR_ISSUE_INFORMATION Then Exit Sub
+
+ Dim issueKey As String
+ issueKey = getAppSpecificApplicationName & "_" & myIssue.IssueTypeXML & "_" & myIssue.SubTypeXML
+
+ 'Store costing metrics for Issue
+ AddIssueAndOneToDict issueKey
+
+ 'Store prepeared issue for costing metrics
+ If myIssue.Preparable Then
+ AddPreparedIssueAndOneToDict issueKey & "_Prepared"
+ End If
+
+ 'Additional costing Factors output for VB macros
+ If (myIssue.IssueTypeXML = CSTR_ISSUE_VBA_MACROS) And _
+ (myIssue.SubTypeXML <> CSTR_SUBISSUE_MACRO_PASSWORD_PROTECTION) Then
+
+ 'Unique Macro Module and Line count
+ AddMacroModuleHashToMacroDict myIssue
+
+ 'Line count
+ AddIssueAndValToDict issueKey & "_" & CSTR_SUBISSUE_VBA_MACROS_NUMLINES, myIssue, _
+ RID_STR_COMMON_ATTRIBUTE_NUMBER_OF_LINES
+
+ 'User From info
+ If myIssue.SubLocation = CSTR_USER_FORM Then
+ AddIssueAndOneToDict issueKey & "_" & CSTR_SUBISSUE_VBA_MACROS_USERFORMS_COUNT
+
+ AddIssueAndValToDict issueKey & "_" & CSTR_SUBISSUE_VBA_MACROS_USERFORMS_CONTROL_COUNT, myIssue, _
+ RID_STR_COMMON_ATTRIBUTE_CONTROLS
+ End If
+ 'Additional costing Factors output for External References
+ ElseIf (myIssue.IssueTypeXML = CSTR_ISSUE_PORTABILITY And _
+ myIssue.SubTypeXML = CSTR_SUBISSUE_EXTERNAL_REFERENCES_IN_MACRO) Then
+
+ AddIssueAndValToDict issueKey & "_" & CSTR_SUBISSUE_EXTERNAL_REFERENCES_IN_MACRO_COUNT, myIssue, _
+ RID_STR_COMMON_ATTRIBUTE_NON_PORTABLE_EXTERNAL_REFERENCES_COUNT
+ End If
+
+FinalExit:
+ Exit Sub
+
+HandleErrors:
+ WriteDebug currentFunctionName & _
+ " : path " & aAnalysis.name & ": " & _
+ " : myIssue " & myIssue.IssueTypeXML & "_" & myIssue.SubTypeXML & ": " & _
+ Err.Number & " " & Err.Description & " " & Err.Source
+ Resume FinalExit
+End Sub
+
+Sub OutputCommonIssueDetails(wsIssueDetails As Worksheet, rowIndex As Long, _
+ aAnalysis As DocumentAnalysis, myIssue As IssueInfo, fileName As String)
+ Const CSTR_USER_FORM = "User Form"
+ On Error GoTo HandleErrors
+ Dim currentFunctionName As String
+ currentFunctionName = "OutputCommonIssueDetails"
+
+ SetWorksheetCellValueToString wsIssueDetails, rowIndex, CISSUE_DETDOCNAME, fileName
+ SetWorksheetCellValueToString wsIssueDetails, rowIndex, CISSUE_DETDOCAPPLICATION, aAnalysis.Application
+ SetWorksheetCellValueToString wsIssueDetails, rowIndex, CISSUE_DETTYPE, myIssue.IssueType
+ SetWorksheetCellValueToString wsIssueDetails, rowIndex, CISSUE_DETSUBTYPE, myIssue.SubType
+ SetWorksheetCellValueToString wsIssueDetails, rowIndex, CISSUE_DETLOCATION, myIssue.Location
+ SetWorksheetCellValueToString wsIssueDetails, rowIndex, CISSUE_DETSUBLOCATION, _
+ IIf(myIssue.SubLocation = "", RID_STR_COMMON_NA, myIssue.SubLocation)
+ SetWorksheetCellValueToVariant wsIssueDetails, rowIndex, CISSUE_DETLINE, _
+ IIf(myIssue.Line = -1, RID_STR_COMMON_NA, myIssue.Line)
+ SetWorksheetCellValueToString wsIssueDetails, rowIndex, CISSUE_DETCOLUMN, _
+ IIf(myIssue.column = "", RID_STR_COMMON_NA, myIssue.column)
+ SetWorksheetCellValueToString wsIssueDetails, rowIndex, CISSUE_DETNAMEANDPATH, aAnalysis.name
+
+
+FinalExit:
+ Exit Sub
+
+HandleErrors:
+ WriteDebug currentFunctionName & _
+ " : path " & aAnalysis.name & ": " & _
+ " : rowIndex " & rowIndex & ": " & _
+ " : myIssue " & myIssue.IssueTypeXML & "_" & myIssue.SubTypeXML & ": " & _
+ Err.Number & " " & Err.Description & " " & Err.Source
+ Resume FinalExit
+End Sub
+
+Sub AddIssueAndBoolValToDict(issueKey As String, issue As IssueInfo, valKey As String)
+ On Error GoTo HandleErrors
+ Dim currentFunctionName As String
+ currentFunctionName = "AddIssueAndBoolValToDict"
+
+ If mIssuesDict.Exists(issueKey) Then
+ mIssuesDict.item(issueKey) = mIssuesDict.item(issueKey) + _
+ IIf(issue.Values(valKey) > 0, 1, 0)
+ Else
+ mIssuesDict.Add issueKey, IIf(issue.Values(valKey) > 0, 1, 0)
+ End If
+FinalExit:
+ Exit Sub
+
+HandleErrors:
+ WriteDebug currentFunctionName & _
+ " : issueKey " & issueKey & ": " & _
+ " : valKey " & valKey & ": " & _
+ Err.Number & " " & Err.Description & " " & Err.Source
+ Resume FinalExit
+End Sub
+Sub AddIssueAndValToDict(issueKey As String, issue As IssueInfo, valKey As String)
+ On Error GoTo HandleErrors
+ Dim currentFunctionName As String
+ currentFunctionName = "AddIssueAndValToDict"
+
+ If mIssuesDict.Exists(issueKey) Then
+ mIssuesDict.item(issueKey) = mIssuesDict.item(issueKey) + issue.Values(valKey)
+ Else
+ mIssuesDict.Add issueKey, issue.Values(valKey)
+ End If
+FinalExit:
+ Exit Sub
+
+HandleErrors:
+ WriteDebug currentFunctionName & _
+ " : issueKey " & issueKey & ": " & _
+ " : valKey " & valKey & ": " & _
+ Err.Number & " " & Err.Description & " " & Err.Source
+ Resume FinalExit
+End Sub
+
+Sub AddMacroModuleHashToMacroDict(issue As IssueInfo)
+ On Error GoTo HandleErrors
+ Dim currentFunctionName As String
+ Dim issueKey As String
+ Dim issueVal As String
+ currentFunctionName = "AddMacroModuleHashToMacroDict"
+
+ issueKey = issue.Values(RID_STR_COMMON_ATTRIBUTE_SIGNATURE)
+ If issueKey = RID_STR_COMMON_NA Then Exit Sub
+
+ If Not mMacroDict.Exists(issueKey) Then
+ mMacroDict.Add issueKey, issue.Values(RID_STR_COMMON_ATTRIBUTE_NUMBER_OF_LINES)
+ End If
+FinalExit:
+ Exit Sub
+
+HandleErrors:
+ WriteDebug currentFunctionName & _
+ " : issueKey " & issueKey & ": " & _
+ Err.Number & " " & Err.Description & " " & Err.Source
+ Resume FinalExit
+End Sub
+
+Sub AddIssueAndOneToDict(key As String)
+ On Error GoTo HandleErrors
+ Dim currentFunctionName As String
+ currentFunctionName = "AddIssueAndOneToDict"
+
+ If mIssuesDict.Exists(key) Then
+ mIssuesDict.item(key) = mIssuesDict.item(key) + 1
+ Else
+ mIssuesDict.Add key, 1
+ End If
+FinalExit:
+ Exit Sub
+
+HandleErrors:
+ WriteDebug currentFunctionName & " : key " & key & ": " & Err.Number & " " & Err.Description & " " & Err.Source
+ Resume FinalExit
+End Sub
+
+Sub AddPreparedIssueAndOneToDict(key As String)
+ On Error GoTo HandleErrors
+ Dim currentFunctionName As String
+ currentFunctionName = "AddPreparedIssueAndOneToDict"
+
+ If mPreparedIssuesDict.Exists(key) Then
+ mPreparedIssuesDict.item(key) = mPreparedIssuesDict.item(key) + 1
+ Else
+ mPreparedIssuesDict.Add key, 1
+ End If
+FinalExit:
+ Exit Sub
+
+HandleErrors:
+ WriteDebug currentFunctionName & " : key " & key & ": " & Err.Number & " " & Err.Description & " " & Err.Source
+ Resume FinalExit
+End Sub
+
+Function GetExcelInstance() As Excel.Application
+ On Error GoTo HandleErrors
+ Dim currentFunctionName As String
+ currentFunctionName = "GetExcelInstance"
+
+ Dim xl As Excel.Application
+ On Error Resume Next
+ 'Try and get an existing instance
+ Set xl = GetObject(, "Excel.Application")
+ If Err.Number = 429 Then
+ Set xl = CreateObject("Excel.Application")
+ ElseIf Err.Number <> 0 Then
+ Set xl = Nothing
+ MsgBox "Error: " & Err.Description
+ Exit Function
+ End If
+ Set GetExcelInstance = xl
+ Set xl = Nothing
+FinalExit:
+ Exit Function
+
+HandleErrors:
+ WriteDebug currentFunctionName & ": " & Err.Number & " " & Err.Description & " " & Err.Source
+ Resume FinalExit
+End Function
+
+Sub WriteOverview(logWb As WorkBook, DocCount As DocumentCount, templateCount As DocumentCount, _
+ macroClasses As DocMacroClassifications, issueClasses As DocIssueClassifications)
+ Const COV_ISSUECLASS_COMPLEX = "MAW_ISSUECLASS_COMPLEX"
+ Const COV_ISSUECLASS_MINOR = "MAW_ISSUECLASS_MINOR"
+ Const COV_ISSUECLASS_NONE = "MAW_ISSUECLASS_NONE"
+
+ Const COV_MACROCLASS_COMPLEX = "MAW_MACROCLASS_COMPLEX"
+ Const COV_MACROCLASS_MEDIUM = "MAW_MACROCLASS_MEDIUM"
+ Const COV_MACROCLASS_SIMPLE = "MAW_MACROCLASS_SIMPLE"
+ Const COV_MACROCLASS_NONE = "MAW_MACROCLASS_NONE"
+
+ Const COV_ISSUECOUNT_COMPLEX = "MAW_ISSUECOUNT_COMPLEX"
+ Const COV_ISSUECOUNT_MINOR = "MAW_ISSUECOUNT_MINOR"
+
+ Const COV_MODDATES_LESS3MONTHS = "MAW_MODDATES_LESS3MONTHS"
+ Const COV_MODDATES_3TO6MONTHS = "MAW_MODDATES_3TO6MONTHS"
+ Const COV_MODDATES_6TO12MONTHS = "MAW_MODDATES_6TO12MONTHS"
+ Const COV_MODDATES_MORE12MONTHS = "MAW_MODDATES_MORE12MONTHS"
+
+ Const COV_DOC_MIGRATION_COSTS = "Document_Migration_Costs"
+ Const COV_DOC_PREPARABLE_COSTS = "Document_Migration_Preparable_Costs"
+ Const COV_MACRO_MIGRATION_COSTS = "Macro_Migration_Costs"
+
+ On Error GoTo HandleErrors
+ Dim currentFunctionName As String
+ currentFunctionName = "WriteOverview"
+
+ Dim appName As String
+ appName = getAppSpecificApplicationName
+
+ 'OV - Title
+ SetWorkbookNameValueToString logWb, COVERVIEW_TITLE_LABEL, GetTitle
+ SetWorkbookNameValueToVariant logWb, "AnalysisDate", Now
+ SetWorkbookNameValueToString logWb, "AnalysisVersion", _
+ RID_STR_COMMON_OV_VERSION_STR & ": " & GetTitle & " " & GetVersion
+
+ 'OV - Number of Documents Analyzed
+ AddLongToWorkbookNameValue logWb, CNUMBERDOC_ALL & getAppSpecificDocExt, DocCount.numDocsAnalyzed
+ AddLongToWorkbookNameValue logWb, CNUMBERDOC_ALL & getAppSpecificTemplateExt, templateCount.numDocsAnalyzed
+
+ 'OV - Documents with Document Migration Issues (excludes macro issues)
+ AddLongToWorkbookNameValue logWb, appName & "_" & COV_ISSUECLASS_COMPLEX, issueClasses.complex
+ AddLongToWorkbookNameValue logWb, appName & "_" & COV_ISSUECLASS_MINOR, issueClasses.Minor
+ AddLongToWorkbookNameValue logWb, appName & "_" & COV_ISSUECLASS_NONE, issueClasses.None
+
+ 'OV - Documents with Macro Migration Issues
+ AddLongToWorkbookNameValue logWb, appName & "_" & COV_MACROCLASS_COMPLEX, macroClasses.complex
+ AddLongToWorkbookNameValue logWb, appName & "_" & COV_MACROCLASS_MEDIUM, macroClasses.Medium
+ AddLongToWorkbookNameValue logWb, appName & "_" & COV_MACROCLASS_SIMPLE, macroClasses.Simple
+ AddLongToWorkbookNameValue logWb, appName & "_" & COV_MACROCLASS_NONE, macroClasses.None
+
+ 'OV - Document Modification Dates
+ Dim modDates As DocModificationDates
+ Call GetDocModificationDates(modDates)
+
+ SetWorkbookNameValueToLong logWb, COV_MODDATES_LESS3MONTHS, modDates.lessThanThreemonths
+ SetWorkbookNameValueToLong logWb, COV_MODDATES_3TO6MONTHS, modDates.threeToSixmonths
+ SetWorkbookNameValueToLong logWb, COV_MODDATES_6TO12MONTHS, modDates.sixToTwelvemonths
+ SetWorkbookNameValueToLong logWb, COV_MODDATES_MORE12MONTHS, modDates.greaterThanOneYear
+
+
+ If InDocPreparation Then
+ 'OV - Document Migration Issues(excludes macro issues)
+ AddLongToWorkbookNameValue logWb, appName & "_" & COV_ISSUECOUNT_COMPLEX, _
+ DocCount.numComplexIssues + templateCount.numComplexIssues
+ AddLongToWorkbookNameValue logWb, appName & "_" & COV_ISSUECOUNT_MINOR, _
+ DocCount.numMinorIssues + templateCount.numMinorIssues
+
+ 'OV - Document Migration Costs
+ AddLongToWorkbookNameValue logWb, appName & "_" & COV_DOC_MIGRATION_COSTS, _
+ DocCount.totalDocIssuesCosts + templateCount.totalDocIssuesCosts
+
+ 'OV - Document Migration Preparable Costs
+ AddLongToWorkbookNameValue logWb, COV_DOC_PREPARABLE_COSTS, _
+ DocCount.totalPreparableIssuesCosts + templateCount.totalPreparableIssuesCosts
+
+ 'OV - Macro Migration Costs
+ AddLongToWorkbookNameValue logWb, appName & "_" & COV_MACRO_MIGRATION_COSTS, _
+ DocCount.totalMacroCosts + templateCount.totalMacroCosts
+ End If
+
+ 'OV - Internal Attributes
+ AddLongToWorkbookNameValue logWb, appName & "_" & "TotalDocsAnalysedWithIssues", _
+ DocCount.numDocsAnalyzedWithIssues + templateCount.numDocsAnalyzedWithIssues
+
+FinalExit:
+ Exit Sub
+
+HandleErrors:
+ WriteDebug currentFunctionName & " : Problem writing overview: " & Err.Number & " " & Err.Description & " " & Err.Source
+ Resume FinalExit
+End Sub
+
+Sub SetupDAWResultsSpreadsheet(logWb As WorkBook, fontName As String, fontSize As Long)
+ On Error GoTo HandleErrors
+ Dim currentFunctionName As String
+ currentFunctionName = "SetupDAWResultsSpreadsheet"
+ Dim bSetupRun As Boolean
+ bSetupRun = CBool(GetWorkbookNameValueAsLong(logWb, COV_DAW_SETUP_SHEETS_RUN_LBL))
+
+ If bSetupRun Then Exit Sub
+
+ 'Setup Text Boxes
+ SetupSheetTextBox logWb, RID_STR_COMMON_RESULTS_SHEET_NAME_OVERVIEW, COV_DOC_MOD_DATES_COMMENT_TXB, _
+ RID_STR_COMMON_OV_DOC_MOD_DATES_COMMENT_TITLE, RID_STR_COMMON_OV_DOC_MOD_DATES_COMMENT_BODY, _
+ CCOMMENTS_FONT_SIZE, fontName
+ SetupSheetTextBox logWb, RID_STR_COMMON_RESULTS_SHEET_NAME_OVERVIEW, COV_DOC_MOD_DATES_LEGEND_TXB, _
+ RID_STR_COMMON_OV_LEGEND_TITLE, RID_STR_COMMON_OV_DOC_MOD_DATES_LEGEND_BODY, fontSize, fontName
+ SetupSheetTextBox logWb, RID_STR_COMMON_RESULTS_SHEET_NAME_OVERVIEW, COV_DOC_MACRO_COMMENT_TXB, _
+ RID_STR_COMMON_OV_DOC_MACRO_COMMENT_TITLE, RID_STR_COMMON_OV_DOC_MACRO_COMMENT_BODY, _
+ CCOMMENTS_FONT_SIZE, fontName
+ SetupSheetTextBox logWb, RID_STR_COMMON_RESULTS_SHEET_NAME_OVERVIEW, COV_DOC_MACRO_LEGEND_TXB, _
+ RID_STR_COMMON_OV_LEGEND_TITLE, RID_STR_COMMON_OV_DOC_MACRO_LEGEND_BODY, fontSize, fontName
+ Dim monthLimit As Long
+ monthLimit = GetIssuesLimitInDays / CNUMDAYS_IN_MONTH
+ SetWorkbookNameValueToString logWb, COV_HIGH_LEVEL_ANALYSIS_LBL, _
+ IIf(monthLimit <> CMAX_LIMIT, _
+ ReplaceTopicTokens(RID_STR_COMMON_OV_HIGH_LEVEL_ANALYSIS_DAW, CR_TOPIC, CStr(monthLimit)), _
+ RID_STR_COMMON_OV_HIGH_LEVEL_ANALYSIS_PAW_NO_LIMIT)
+
+ SetupSheetTextBox logWb, RID_STR_COMMON_RESULTS_SHEET_NAME_OVERVIEW, COV_DOC_ANALYSIS_COMMENT_TXB, _
+ RID_STR_COMMON_OV_DOC_ANALYSIS_COMMENT_TITLE, RID_STR_COMMON_OV_DOC_ANALYSIS_COMMENT_BODY, _
+ CCOMMENTS_FONT_SIZE, fontName
+ SetupSheetTextBox logWb, RID_STR_COMMON_RESULTS_SHEET_NAME_OVERVIEW, COV_DOC_ANALYSIS_LEGEND_DAW_TXB, _
+ RID_STR_COMMON_OV_LEGEND_TITLE, RID_STR_COMMON_OV_DOC_ANALYSIS_DAW_LEGEND_BODY, fontSize, fontName
+
+ 'Setup Chart Titles
+ SetupSheetChartTitles logWb, RID_STR_COMMON_RESULTS_SHEET_NAME_OVERVIEW, COV_DOC_MOD_DATES_CHART, _
+ RID_STR_COMMON_OV_DOC_MOD_DATES_CHART_TITLE
+ SetupSheetChartTitles logWb, RID_STR_COMMON_RESULTS_SHEET_NAME_OVERVIEW, COV_DOC_MACRO_CHART, _
+ RID_STR_COMMON_OV_DOC_MACRO_CHART_TITLE
+ SetupSheetChartTitles logWb, RID_STR_COMMON_RESULTS_SHEET_NAME_OVERVIEW, COV_DOC_ANALYSIS_CHART, _
+ RID_STR_COMMON_OV_DOC_ANALYSIS_CHART_TITLE
+
+ 'Set selection to top cell of Overview
+ logWb.Sheets(RID_STR_COMMON_RESULTS_SHEET_NAME_OVERVIEW).Range("A1").Select
+
+ bSetupRun = True
+ SetWorkbookNameValueToBoolean logWb, COV_DAW_SETUP_SHEETS_RUN_LBL, bSetupRun
+FinalExit:
+ Exit Sub
+
+HandleErrors:
+ WriteDebug currentFunctionName & " : Problem setting up spreadsheet for DAW: " & Err.Number & " " & Err.Description & " " & Err.Source
+ Resume FinalExit
+End Sub
+
+Sub SetupPAWResultsSpreadsheet(logWb As WorkBook, fontName As String, fontSize As Long)
+ On Error GoTo HandleErrors
+ Dim currentFunctionName As String
+ currentFunctionName = "SetupPAWResultsSpreadsheet"
+ Dim bSetupRun As Boolean
+ bSetupRun = CBool(GetWorkbookNameValueAsLong(logWb, COV_PAW_SETUP_SHEETS_RUN_LBL))
+
+ If bSetupRun Then Exit Sub
+
+ 'Costs
+ logWb.Names(COV_COSTS_PREPISSUE_COUNT_COL_LBL).RefersToRange.EntireColumn.Hidden = False
+
+ 'Setup Text Boxes
+ SetupSheetTextBox logWb, RID_STR_COMMON_RESULTS_SHEET_NAME_OVERVIEW, COV_DOC_MOD_DATES_LEGEND_TXB, _
+ RID_STR_COMMON_OV_LEGEND_TITLE, RID_STR_COMMON_OV_DOC_MOD_DATES_LEGEND_BODY, fontSize, fontName
+ SetupSheetTextBox logWb, RID_STR_COMMON_RESULTS_SHEET_NAME_OVERVIEW, COV_DOC_MACRO_LEGEND_TXB, _
+ RID_STR_COMMON_OV_LEGEND_TITLE, RID_STR_COMMON_OV_DOC_MACRO_LEGEND_BODY, fontSize, fontName
+ SetWorkbookNameValueToString logWb, COV_HIGH_LEVEL_ANALYSIS_LBL, _
+ RID_STR_COMMON_OV_HIGH_LEVEL_ANALYSIS_PAW_NO_LIMIT
+ SetupSheetTextBox logWb, RID_STR_COMMON_RESULTS_SHEET_NAME_OVERVIEW, COV_DOC_ANALYSIS_LEGEND_PAW_TXB, _
+ RID_STR_COMMON_OV_LEGEND_TITLE, RID_STR_COMMON_OV_DOC_ANALYSIS_PAW_LEGEND_BODY, fontSize, fontName
+
+ 'Setup Chart Titles
+ SetupSheetChartTitles logWb, RID_STR_COMMON_RESULTS_SHEET_NAME_OVERVIEW, COV_DOC_MOD_DATES_CHART, _
+ RID_STR_COMMON_OV_DOC_MOD_DATES_CHART_TITLE
+ SetupSheetChartTitles logWb, RID_STR_COMMON_RESULTS_SHEET_NAME_OVERVIEW, COV_DOC_MACRO_CHART, _
+ RID_STR_COMMON_OV_DOC_MACRO_CHART_TITLE
+ SetupSheetChartTitles logWb, RID_STR_COMMON_RESULTS_SHEET_NAME_OVERVIEW, COV_DOC_ANALYSIS_CHART, _
+ RID_STR_COMMON_OV_DOC_ANALYSIS_CHART_TITLE
+
+ 'Set selection to top cell of Overview
+ logWb.Sheets(RID_STR_COMMON_RESULTS_SHEET_NAME_OVERVIEW).Range("A1").Select
+
+ bSetupRun = True
+ SetWorkbookNameValueToBoolean logWb, COV_PAW_SETUP_SHEETS_RUN_LBL, bSetupRun
+
+FinalExit:
+ Exit Sub
+
+HandleErrors:
+ WriteDebug currentFunctionName & " : Problem setting up spreadsheet for PAW: " & Err.Number & " " & Err.Description & " " & Err.Source
+ Resume FinalExit
+End Sub
+
+Sub SetupPrintRanges(logWb As WorkBook, docPropRow As Long, appIssuesRow As Long, issueDetailsRow As Long, _
+ refDetailsRow As Long)
+ On Error GoTo HandleErrors
+ Dim currentFunctionName As String
+ currentFunctionName = "SetupPrintRanges"
+
+ 'Set Print Ranges
+ If InDocPreparation Then
+
+ logWb.Worksheets(RID_STR_COMMON_RESULTS_SHEET_NAME_DOCPROP).PageSetup.PrintArea = "$A1:$U" & (docPropRow + mDocPropRowOffset)
+ logWb.Worksheets(RID_STR_COMMON_RESULTS_SHEET_NAME_DOCISSUE_DETAILS).PageSetup.PrintArea = "$A1:$J" & issueDetailsRow
+ logWb.Worksheets(RID_STR_COMMON_RESULTS_SHEET_NAME_DOCREF_DETAILS).PageSetup.PrintArea = "$A1:$G" & refDetailsRow
+ If getAppSpecificApplicationName = CAPPNAME_WORD Then
+ logWb.Worksheets(RID_STR_COMMON_RESULTS_SHEET_NAME_DOCISSUES_WORD).PageSetup.PrintArea = _
+ "$A1:$N" & appIssuesRow
+ ElseIf getAppSpecificApplicationName = CAPPNAME_EXCEL Then
+ logWb.Worksheets(RID_STR_COMMON_RESULTS_SHEET_NAME_DOCISSUES_EXCEL).PageSetup.PrintArea = _
+ "$A1:$M" & appIssuesRow
+ Else
+ logWb.Worksheets(RID_STR_COMMON_RESULTS_SHEET_NAME_DOCISSUES_POWERPOINT).PageSetup.PrintArea = _
+ "$A1:$K" & appIssuesRow
+ End If
+ Else
+ logWb.Worksheets(RID_STR_COMMON_RESULTS_SHEET_NAME_DOCPROP).PageSetup.PrintArea = "$A1:$U" & (docPropRow + mDocPropRowOffset)
+ End If
+
+FinalExit:
+ Exit Sub
+
+HandleErrors:
+ WriteDebug currentFunctionName & " : Problem setting print ranges: " & Err.Number & " " & Err.Description & " " & Err.Source
+ Resume FinalExit
+End Sub
+
+Sub SetupSheetChartTitles(logWb As WorkBook, namedWorksheet As String, namedChart As String, _
+ chartTitle As String)
+ Const CCHART_TITLE_FONT_SIZE = 11
+ On Error GoTo HandleErrors
+ Dim currentFunctionName As String
+ currentFunctionName = "SetupSheetChartTitles"
+
+ With logWb.Sheets(namedWorksheet).ChartObjects(namedChart).Chart
+ .HasTitle = True
+ .chartTitle.Characters.Text = chartTitle
+ .chartTitle.Font.Size = CCHART_TITLE_FONT_SIZE
+ End With
+
+FinalExit:
+ Exit Sub
+
+HandleErrors:
+ WriteDebug currentFunctionName & _
+ " namedWorkSheet: " & namedWorksheet & _
+ " namedChart: " & namedChart & _
+ " chartTitle: " & chartTitle & _
+ Err.Number & " " & Err.Description & " " & Err.Source
+ Resume FinalExit
+End Sub
+
+Sub SetupSheetTextBox(logWb As WorkBook, namedWorksheet As String, _
+ textBoxName As String, textBoxTitle As String, textBoxBody As String, _
+ textSize As Long, fontName As String)
+
+ Const CMAX_INSERTABLE_STRING_LEN = 255
+ On Error GoTo HandleErrors
+ Dim currentFunctionName As String
+ currentFunctionName = "SetupSheetTextBox"
+
+ Dim strTextBody As String
+ Dim allText As String
+ strTextBody = ReplaceTopic2Tokens(textBoxBody, CR_STR, Chr(10), CR_PRODUCT, RID_STR_COMMON_OV_PRODUCT_STR)
+
+ 'Setup Text Boxes
+ logWb.Sheets(namedWorksheet).Activate
+ logWb.Sheets(namedWorksheet).Shapes(textBoxName).Select
+
+ '*** Workaround Excel bug: 213841 XL: Passed Strings Longer Than 255 Characters Are Truncated
+ Dim I As Long
+ logWb.Application.Selection.Text = ""
+
+ logWb.Application.Selection.Characters.Text = textBoxTitle & Chr(10)
+
+ With logWb.Application.Selection
+ For I = 0 To Int(Len(strTextBody) / CMAX_INSERTABLE_STRING_LEN)
+ .Characters(.Characters.count + 1).Text = Mid(strTextBody, _
+ (I * CMAX_INSERTABLE_STRING_LEN) + 1, CMAX_INSERTABLE_STRING_LEN)
+ Next
+ End With
+
+ 'Highlight title only
+ With logWb.Application.Selection.Characters(start:=1, Length:=Len(textBoxTitle)).Font
+ .name = fontName
+ .FontStyle = "Bold"
+ .Size = textSize
+ End With
+ With logWb.Application.Selection.Characters(start:=Len(textBoxTitle) + 1, _
+ Length:=Len(strTextBody) + 1).Font
+ .name = fontName
+ .FontStyle = "Regular"
+ .Size = textSize
+ End With
+
+FinalExit:
+ Exit Sub
+
+HandleErrors:
+ WriteDebug currentFunctionName & _
+ " namedWorkSheet: " & namedWorksheet & _
+ " textBoxName: " & textBoxName & _
+ " textBoxTitle: " & textBoxTitle & _
+ " textBoxBody: " & textBoxBody & _
+ " textSize: " & textSize & _
+ Err.Number & " " & Err.Description & " " & Err.Source
+ Resume FinalExit
+End Sub
+Function GetWorkbookNameValueAsLong(logWb As WorkBook, name As String) As Long
+ On Error GoTo HandleErrors
+ Dim currentFunctionName As String
+ currentFunctionName = "GetWorkbookNameValueAsLong"
+
+ GetWorkbookNameValueAsLong = logWb.Names(name).RefersToRange.Cells(1, 1).value
+
+FinalExit:
+ Exit Function
+
+HandleErrors:
+ GetWorkbookNameValueAsLong = 0
+ WriteDebug currentFunctionName & " : name " & name & ": " & Err.Number & " " & Err.Description & " " & Err.Source
+ Resume FinalExit
+End Function
+
+Function GetWorksheetCellValueAsLong(logWs As Worksheet, row As Long, col As Long) As Long
+ On Error GoTo HandleErrors
+ Dim currentFunctionName As String
+ currentFunctionName = "GetWorksheetCellValueAsLong"
+
+ GetWorksheetCellValueAsLong = logWs.Cells(row, col).value
+
+FinalExit:
+ Exit Function
+
+HandleErrors:
+ WriteDebug currentFunctionName & _
+ " : row " & row & _
+ " : col " & col & _
+ Err.Number & " " & Err.Description & " " & Err.Source
+ Resume FinalExit
+End Function
+
+Function GetWorksheetCellValueAsString(logWs As Worksheet, row As Long, col As Long) As String
+ On Error GoTo HandleErrors
+ Dim currentFunctionName As String
+ currentFunctionName = "GetWorksheetCellValueToString"
+
+ GetWorksheetCellValueAsString = logWs.Cells(row, col).value
+
+FinalExit:
+ Exit Function
+
+HandleErrors:
+ GetWorksheetCellValueAsString = ""
+
+ WriteDebug currentFunctionName & _
+ " : row " & row & _
+ " : col " & col & _
+ Err.Number & " " & Err.Description & " " & Err.Source
+ Resume FinalExit
+End Function
+
+Sub SetWorksheetCellValueToLong(logWs As Worksheet, row As Long, col As Long, val As Long)
+ On Error GoTo HandleErrors
+ Dim currentFunctionName As String
+ currentFunctionName = "SetWorksheetCellValueToLong"
+
+ logWs.Cells(row, col) = val
+
+FinalExit:
+ Exit Sub
+
+HandleErrors:
+ WriteDebug currentFunctionName & _
+ " : row " & row & _
+ " : col " & col & _
+ " : val " & val & ": " & _
+ Err.Number & " " & Err.Description & " " & Err.Source
+ Resume FinalExit
+End Sub
+Sub SetWorksheetCellValueToInteger(logWs As Worksheet, row As Long, col As Long, intVal As Integer)
+ On Error GoTo HandleErrors
+ Dim currentFunctionName As String
+ currentFunctionName = "SetWorksheetCellValueToInteger"
+
+ logWs.Cells(row, col) = intVal
+
+FinalExit:
+ Exit Sub
+
+HandleErrors:
+ WriteDebug currentFunctionName & _
+ " : row " & row & _
+ " : col " & col & _
+ " : intVal " & intVal & ": " & _
+ Err.Number & " " & Err.Description & " " & Err.Source
+ Resume FinalExit
+End Sub
+
+Sub SetWorksheetCellValueToVariant(logWs As Worksheet, row As Long, col As Long, varVal As Variant)
+ On Error GoTo HandleErrors
+ Dim currentFunctionName As String
+ currentFunctionName = "SetWorksheetCellValueToInteger"
+
+ logWs.Cells(row, col) = varVal
+
+FinalExit:
+ Exit Sub
+
+HandleErrors:
+ WriteDebug currentFunctionName & _
+ " : row " & row & _
+ " : col " & col & _
+ " : varVal " & varVal & ": " & _
+ Err.Number & " " & Err.Description & " " & Err.Source
+ Resume FinalExit
+End Sub
+
+Sub SetWorksheetCellValueToString(logWs As Worksheet, row As Long, col As Long, strVal As String)
+ On Error GoTo HandleErrors
+ Dim currentFunctionName As String
+ currentFunctionName = "SetWorksheetCellValueToString"
+
+ logWs.Cells(row, col) = strVal
+
+FinalExit:
+ Exit Sub
+
+HandleErrors:
+ WriteDebug currentFunctionName & _
+ " : row " & row & _
+ " : col " & col & _
+ " : strVal " & strVal & ": " & _
+ Err.Number & " " & Err.Description & " " & Err.Source
+ Resume FinalExit
+End Sub
+
+Sub SetWorkbookNameValueToBoolean(logWb As WorkBook, name As String, bVal As Boolean)
+ On Error GoTo HandleErrors
+ Dim currentFunctionName As String
+ currentFunctionName = "SetWorkbookNameValueToBoolean"
+
+ logWb.Names(name).RefersToRange.Cells(1, 1) = bVal
+
+FinalExit:
+ Exit Sub
+
+HandleErrors:
+ WriteDebug currentFunctionName & " : name " & name & " : boolean value " & bVal & ": " & Err.Number & " " & Err.Description & " " & Err.Source
+ Resume FinalExit
+End Sub
+
+Sub SetWorkbookNameValueToString(logWb As WorkBook, name As String, val As String)
+ On Error GoTo HandleErrors
+ Dim currentFunctionName As String
+ currentFunctionName = "SetWorkbookNameValueToString"
+
+ logWb.Names(name).RefersToRange.Cells(1, 1) = val
+
+FinalExit:
+ Exit Sub
+
+HandleErrors:
+ WriteDebug currentFunctionName & " : name " & name & " : value " & val & ": " & Err.Number & " " & Err.Description & " " & Err.Source
+ Resume FinalExit
+End Sub
+
+Sub SetWorkbookNameValueToLong(logWb As WorkBook, name As String, val As Long)
+ On Error GoTo HandleErrors
+ Dim currentFunctionName As String
+ currentFunctionName = "SetWorkbookNameValueToLong"
+
+ logWb.Names(name).RefersToRange.Cells(1, 1) = val
+
+FinalExit:
+ Exit Sub
+
+HandleErrors:
+ WriteDebug currentFunctionName & " : name " & name & " : value " & val & ": " & Err.Number & " " & Err.Description & " " & Err.Source
+ Resume FinalExit
+End Sub
+
+Sub SetWorkbookNameValueToVariant(logWb As WorkBook, name As String, val As Variant)
+ On Error GoTo HandleErrors
+ Dim currentFunctionName As String
+ currentFunctionName = "SetWorkbookNameValueToVariant"
+
+ logWb.Names(name).RefersToRange.Cells(1, 1) = val
+
+FinalExit:
+ Exit Sub
+
+HandleErrors:
+ WriteDebug currentFunctionName & " : name " & name & " : value " & val & ": " & Err.Number & " " & Err.Description & " " & Err.Source
+ Resume FinalExit
+End Sub
+
+Sub AddLongToWorkbookNameValue(logWb As WorkBook, name As String, val As Long)
+ On Error GoTo HandleErrors
+ Dim currentFunctionName As String
+ currentFunctionName = "AddLongToWorkbookNameValue"
+
+ logWb.Names(name).RefersToRange.Cells(1, 1) = logWb.Names(name).RefersToRange.Cells(1, 1).value + val
+
+FinalExit:
+ Exit Sub
+
+HandleErrors:
+ WriteDebug currentFunctionName & " : name " & name & " : value " & val & ": " & Err.Number & " " & Err.Description & " " & Err.Source
+ Resume FinalExit
+End Sub
+Sub AddVariantToWorkbookNameValue(logWb As WorkBook, name As String, varVal As Variant)
+ On Error GoTo HandleErrors
+ Dim currentFunctionName As String
+ currentFunctionName = "AddVariantToWorkbookNameValue"
+
+ logWb.Names(name).RefersToRange.Cells(1, 1) = logWb.Names(name).RefersToRange.Cells(1, 1).value + varVal
+
+FinalExit:
+ Exit Sub
+
+HandleErrors:
+ WriteDebug currentFunctionName & " : name " & name & " : value " & varVal & ": " & Err.Number & " " & Err.Description & " " & Err.Source
+ Resume FinalExit
+End Sub
+
+Sub SaveAnalysisResultsVariables(logWb As WorkBook, offsetDocIssueDetailsRow As Long, _
+ offsetDocRefDetailsRow As Long)
+ On Error GoTo HandleErrors
+ Dim currentFunctionName As String
+ currentFunctionName = "SaveAnalysisResultsVariables"
+
+ 'OV - Internal Attributes
+ SetWorkbookNameValueToLong logWb, "TotalIssuesAnalysed", offsetDocIssueDetailsRow
+ SetWorkbookNameValueToLong logWb, "TotalRefsAnalysed", offsetDocRefDetailsRow
+FinalExit:
+ Exit Sub
+
+HandleErrors:
+ WriteDebug currentFunctionName & " : offsetDocIssueDetailsRow " & offsetDocIssueDetailsRow & _
+ " : offsetDocRefDetailsRow " & offsetDocRefDetailsRow & ": " & Err.Number & " " & Err.Description & " " & Err.Source
+ Resume FinalExit
+End Sub
+
+Sub SetupAnalysisResultsVariables(logWb As WorkBook, _
+ offsetDocPropRow As Long, offsetDocIssuesRow As Long, _
+ offsetDocIssueDetailsRow As Long, offsetDocRefDetailsRow As Long)
+ On Error GoTo HandleErrors
+ Dim currentFunctionName As String
+ currentFunctionName = "SetupAnalysisResultsVariables"
+
+ offsetDocPropRow = GetWorkbookNameValueAsLong(logWb, CTOTAL_DOCS_ANALYZED)
+ offsetDocIssueDetailsRow = GetWorkbookNameValueAsLong(logWb, "TotalIssuesAnalysed")
+ offsetDocRefDetailsRow = GetWorkbookNameValueAsLong(logWb, "TotalRefsAnalysed")
+ offsetDocIssuesRow = GetWorkbookNameValueAsLong(logWb, getAppSpecificApplicationName & "_" & "TotalDocsAnalysedWithIssues")
+FinalExit:
+ Exit Sub
+
+HandleErrors:
+ WriteDebug currentFunctionName & _
+ " : offsetDocPropRow " & offsetDocPropRow & _
+ " : offsetDocIssueDetailsRow " & offsetDocIssueDetailsRow & _
+ " : offsetDocRefDetailsRow " & offsetDocRefDetailsRow & _
+ " : offsetDocIssuesRow " & offsetDocIssuesRow & _
+ Err.Number & " " & Err.Description & " " & Err.Source
+ Resume FinalExit
+End Sub
+
+Sub WriteToIni(key As String, value As String)
+ On Error GoTo HandleErrors
+ Dim currentFunctionName As String
+ currentFunctionName = "WriteToIni"
+
+ If mIniFilePath = "" Then Exit Sub
+
+ Call WritePrivateProfileString("Analysis", key, value, mIniFilePath)
+FinalExit:
+ Exit Sub
+
+HandleErrors:
+ WriteDebug currentFunctionName & " : key " & key & " : value " & value & ": " & Err.Number & " " & Err.Description & " " & Err.Source
+ Resume FinalExit
+End Sub
+
+Sub WriteToLog(key As String, value As String)
+ On Error GoTo HandleErrors
+ Dim currentFunctionName As String
+ currentFunctionName = "WriteToLog"
+
+ If mLogFilePath = "" Then Exit Sub
+
+ Dim sSection As String
+ sSection = getAppSpecificApplicationName
+
+ Call WritePrivateProfileString(sSection, key, value, mLogFilePath)
+FinalExit:
+ Exit Sub
+
+HandleErrors:
+ WriteDebug currentFunctionName & " : key " & key & " : value " & value & ": " & Err.Number & " " & Err.Description & " " & Err.Source
+ Resume FinalExit
+End Sub
+Sub WriteDebug(value As String)
+ On Error Resume Next 'Ignore errors in our error writing routines - could get circular dependency otherwise
+ Static ErrCount As Long
+
+ If mLogFilePath = "" Then Exit Sub
+
+ Dim sSection As String
+ sSection = getAppSpecificApplicationName & "Debug"
+
+ If mDebugLevel > 0 Then
+ Call WritePrivateProfileString(sSection, "Doc" & mDocIndex & "_debug" & ErrCount, value, mLogFilePath)
+ ErrCount = ErrCount + 1
+ Else
+ Debug.Print
+ End If
+End Sub
+Sub WriteDebugLevelTwo(value As String)
+ On Error Resume Next 'Ignore errors in our error writing routines - could get circular dependency otherwise
+ Static ErrCountTwo As Long
+
+ If mLogFilePath = "" Then Exit Sub
+
+ Dim sSection As String
+ sSection = getAppSpecificApplicationName & "Debug"
+
+ If mDebugLevel > 1 Then
+ Call WritePrivateProfileString(sSection, "Doc" & mDocIndex & "_debug" & ErrCountTwo, "Level2: " & value, mLogFilePath)
+ ErrCountTwo = ErrCountTwo + 1
+ Else
+ Debug.Print
+ End If
+End Sub
+
+Public Function ProfileLoadDict(dict As Scripting.Dictionary, _
+ lpSectionName As String, _
+ inifile As String) As Long
+ On Error GoTo HandleErrors
+ Dim currentFunctionName As String
+ currentFunctionName = "ProfileLoadDict"
+ Dim success As Long
+ Dim c As Long
+ Dim nSize As Long
+ Dim KeyData As String
+ Dim lpKeyName As String
+ Dim ret As String
+
+ ret = Space$(2048)
+ nSize = Len(ret)
+ success = GetPrivateProfileString( _
+ lpSectionName, vbNullString, "", ret, nSize, inifile)
+
+ If success Then
+ ret = Left$(ret, success)
+
+ Do Until ret = ""
+ lpKeyName = StripNulls(ret)
+ KeyData = ProfileGetItem( _
+ lpSectionName, lpKeyName, "", inifile)
+ dict.Add lpKeyName, KeyData
+ Loop
+ End If
+ ProfileLoadDict = dict.count
+FinalExit:
+ Exit Function
+
+HandleErrors:
+ WriteDebug currentFunctionName & _
+ " : dict.Count " & dict.count & _
+ " : lpSectionName " & lpSectionName & _
+ " : inifile " & inifile & _
+ Err.Number & " " & Err.Description & " " & Err.Source
+ Resume FinalExit
+End Function
+Private Function StripNulls(startStrg As String) As String
+ On Error GoTo HandleErrors
+ Dim currentFunctionName As String
+ currentFunctionName = "StripNulls"
+ Dim pos As Long
+ Dim item As String
+
+ pos = InStr(1, startStrg, Chr$(0))
+
+ If pos Then
+
+ item = Mid$(startStrg, 1, pos - 1)
+ startStrg = Mid$(startStrg, pos + 1, Len(startStrg))
+ StripNulls = item
+
+ End If
+
+FinalExit:
+ Exit Function
+
+HandleErrors:
+ WriteDebug currentFunctionName & " : startStrg " & startStrg & " : " & Err.Number & " " & Err.Description & " " & Err.Source
+ Resume FinalExit
+End Function
+
+Public Function ProfileGetItem(lpSectionName As String, _
+ lpKeyName As String, _
+ defaultValue As String, _
+ inifile As String) As String
+ On Error GoTo HandleErrors
+ Dim currentFunctionName As String
+ currentFunctionName = "ProfileGetItem"
+
+ Dim success As Long
+ Dim nSize As Long
+ Dim ret As String
+ ret = Space$(2048)
+ nSize = Len(ret)
+ success = GetPrivateProfileString(lpSectionName, _
+ lpKeyName, _
+ defaultValue, _
+ ret, _
+ nSize, _
+ inifile)
+ If success Then
+ ProfileGetItem = Left$(ret, success)
+ Else
+ ProfileGetItem = defaultValue
+ End If
+
+FinalExit:
+ Exit Function
+
+HandleErrors:
+ WriteDebug currentFunctionName & _
+ " : lpSectionName " & lpSectionName & _
+ " : lpKeyName " & lpKeyName & _
+ " : defaultValue " & defaultValue & _
+ " : inifile " & inifile & _
+ Err.Number & " " & Err.Description & " " & Err.Source
+ Resume FinalExit
+End Function
+
+Public Function GetDefaultPassword() As String
+ On Error GoTo HandleErrors
+ Dim currentFunctionName As String
+ currentFunctionName = "GetDefaultPassword"
+
+ Static myPassword As String
+
+ If myPassword = "" Then
+ myPassword = ProfileGetItem("Analysis", CDEFAULT_PASSWORD, "", mIniFilePath)
+ End If
+
+ GetDefaultPassword = myPassword
+FinalExit:
+ Exit Function
+
+HandleErrors:
+ WriteDebug currentFunctionName & Err.Number & " " & Err.Description & " " & Err.Source
+ Resume FinalExit
+End Function
+
+Public Function GetVersion() As String
+ On Error GoTo HandleErrors
+ Dim currentFunctionName As String
+ currentFunctionName = "GetVersion"
+
+ Static myVersion As String
+
+ If myVersion = "" Then
+ myVersion = ProfileGetItem("Analysis", CVERSION, "", mIniFilePath)
+ End If
+
+ GetVersion = myVersion
+FinalExit:
+ Exit Function
+
+HandleErrors:
+ WriteDebug currentFunctionName & Err.Number & " " & Err.Description & " " & Err.Source
+ Resume FinalExit
+End Function
+Public Function GetTitle() As String
+ On Error GoTo HandleErrors
+ Dim currentFunctionName As String
+ currentFunctionName = "GetTitle"
+
+ Static myTitle As String
+
+ If myTitle = "" Then
+ myTitle = ProfileGetItem("Analysis", CTITLE, RID_STR_COMMON_ANALYSIS_STR, mIniFilePath)
+ End If
+
+ GetTitle = myTitle
+FinalExit:
+ Exit Function
+
+HandleErrors:
+ WriteDebug currentFunctionName & Err.Number & " " & Err.Description & " " & Err.Source
+ Resume FinalExit
+End Function
+
+Sub SetPrepareToNone()
+ On Error GoTo HandleErrors
+ Dim currentFunctionName As String
+ currentFunctionName = "SetPrepareToNone"
+
+ Call WritePrivateProfileString("Analysis", CDOPREPARE, CStr(0), mIniFilePath)
+
+FinalExit:
+ Exit Sub
+
+HandleErrors:
+ WriteDebug currentFunctionName & Err.Number & " " & Err.Description & " " & Err.Source
+ Resume FinalExit
+End Sub
+
+Function CheckForAbort() As Boolean
+ Dim currentFunctionName As String
+ Dim bAbort As Boolean
+
+ currentFunctionName = "CheckForAbort"
+ bAbort = False
+
+ On Error GoTo HandleErrors
+
+ bAbort = CBool(ProfileGetItem("Analysis", C_ABORT_ANALYSIS, "false", mIniFilePath))
+
+ 'reset the flag
+ If (bAbort) Then Call WriteToIni(C_ABORT_ANALYSIS, "false")
+
+FinalExit:
+ CheckForAbort = bAbort
+ Exit Function
+
+HandleErrors:
+ WriteDebug currentFunctionName & Err.Number & " " & Err.Description & " " & Err.Source
+ Resume FinalExit
+End Function
+
+Function CheckDoPrepare() As Boolean
+ On Error GoTo HandleErrors
+ Dim currentFunctionName As String
+ currentFunctionName = "CheckDoPrepare"
+
+ Static bDoPrepare As Boolean
+ Static myDoPrepare As String
+
+ If myDoPrepare = "" Then
+ bDoPrepare = CBool(ProfileGetItem("Analysis", _
+ CDOPREPARE, "False", mIniFilePath))
+ myDoPrepare = "OK"
+ End If
+
+ CheckDoPrepare = bDoPrepare
+FinalExit:
+ Exit Function
+
+HandleErrors:
+ WriteDebug currentFunctionName & Err.Number & " " & Err.Description & " " & Err.Source
+ Resume FinalExit
+End Function
+
+Function GetIssuesLimitInDays() As Long
+ On Error GoTo HandleErrors
+ Dim currentFunctionName As String
+
+ currentFunctionName = "GetIssuesLimitInDays"
+
+ Static issuesLimit As Long
+ Static myDoPrepare As String
+
+ If issuesLimit = 0 Then
+ issuesLimit = CLng(ProfileGetItem("Analysis", _
+ CISSUES_LIMIT, CMAX_LIMIT, mIniFilePath)) * CNUMDAYS_IN_MONTH
+ End If
+
+ GetIssuesLimitInDays = issuesLimit
+FinalExit:
+ Exit Function
+
+HandleErrors:
+ WriteDebug currentFunctionName & Err.Number & " " & Err.Description & " " & Err.Source
+ Resume FinalExit
+End Function
+
+Public Sub AddIssueDetailsNote(myIssue As IssueInfo, noteNum As Long, noteStr As String, _
+ Optional preStr As String)
+ On Error GoTo HandleErrors
+ Dim currentFunctionName As String
+ currentFunctionName = "AddIssueDetailsNote"
+
+ If IsMissing(preStr) Then
+ preStr = RID_STR_COMMON_NOTE_PRE
+ End If
+ myIssue.Attributes.Add preStr & "[" & noteNum & "]"
+ myIssue.Values.Add noteStr
+
+FinalExit:
+ Exit Sub
+
+HandleErrors:
+ WriteDebug currentFunctionName & " : noteNum " & noteNum & " : noteStr " & noteStr & ": " & Err.Number & " " & Err.Description & " " & Err.Source
+ Resume FinalExit
+End Sub
+
+Public Sub SetupWizardVariables( _
+ fileList As String, storeToDir As String, resultsFile As String, _
+ logFile As String, resultsTemplate As String, bOverwriteFile As Boolean, _
+ bNewResultsFile As Boolean, statFileName As String, debugLevel As Long, _
+ outputType As String, singleFile As String)
+ On Error GoTo HandleErrors
+ Dim currentFunctionName As String
+ currentFunctionName = "SetupWizardVariables"
+
+ If mIniFilePath = "" Then
+ mIniFilePath = GetAppDataFolder & "\Sun\AnalysisWizard\" & CWIZARD & ".ini"
+ End If
+
+ statFileName = ProfileGetItem("Analysis", CSTAT_FILE, "", mIniFilePath)
+ fileList = ProfileGetItem("Analysis", CFILE_LIST, "", mIniFilePath)
+ storeToDir = ProfileGetItem("Analysis", COUTPUT_DIR, "", mIniFilePath)
+ resultsFile = ProfileGetItem("Analysis", CRESULTS_FILE, "", mIniFilePath)
+ logFile = ProfileGetItem("Analysis", CLOG_FILE, "", mIniFilePath)
+ resultsTemplate = ProfileGetItem("Analysis", CRESULTS_TEMPLATE, "", mIniFilePath)
+ bOverwriteFile = IIf(ProfileGetItem("Analysis", CRESULTS_EXIST, COVERWRITE_FILE, mIniFilePath) = COVERWRITE_FILE, _
+ True, False)
+ bNewResultsFile = CBool(ProfileGetItem("Analysis", CNEW_RESULTS_FILE, "True", mIniFilePath))
+ debugLevel = CLng(ProfileGetItem("Analysis", CDEBUG_LEVEL, "1", mIniFilePath))
+ outputType = ProfileGetItem("Analysis", COUTPUT_TYPE, COUTPUT_TYPE_XLS, mIniFilePath)
+ singleFile = ProfileGetItem("Analysis", CSINGLE_FILE, "", mIniFilePath)
+FinalExit:
+ Exit Sub
+
+HandleErrors:
+ WriteDebug currentFunctionName & _
+ ": mIniFilePath " & mIniFilePath & ": " & _
+ Err.Number & " " & Err.Description & " " & Err.Source
+ Resume FinalExit
+End Sub
+
+Public Sub SetupSearchTypes(searchTypes As Collection)
+ On Error GoTo HandleErrors
+ Dim currentFunctionName As String
+ currentFunctionName = "SetupSearchTypes"
+
+ Dim bDocument As Boolean
+ Dim bTemplate As Boolean
+
+ bDocument = CBool(ProfileGetItem("Analysis", LCase("type" & getAppSpecificApplicationName & "doc"), "False", mIniFilePath))
+ bTemplate = CBool(ProfileGetItem("Analysis", LCase("type" & getAppSpecificApplicationName & "dot"), "False", mIniFilePath))
+ If bDocument = True Then searchTypes.Add "*" & getAppSpecificDocExt
+ If bTemplate = True Then searchTypes.Add "*" & getAppSpecificTemplateExt
+FinalExit:
+ Exit Sub
+
+HandleErrors:
+ WriteDebug currentFunctionName & ": searchTypes.Count " & searchTypes.count & ": " & Err.Number & " " & Err.Description & " " & Err.Source
+ Resume FinalExit
+End Sub
+
+Sub WriteXMLHeader(out As TextStream)
+ On Error GoTo HandleErrors
+ Dim currentFunctionName As String
+ currentFunctionName = "WriteXMLHeader"
+
+ out.WriteLine "<?xml version=""1.0"" encoding=""ISO-8859-1""?>"
+ out.WriteLine "<!DOCTYPE results SYSTEM 'analysis.dtd'>"
+
+FinalExit:
+ Exit Sub
+
+HandleErrors:
+ WriteDebug currentFunctionName & ": " & Err.Number & " " & Err.Description & " " & Err.Source
+ Resume FinalExit
+End Sub
+Sub WriteXMLResultsStartTag(out As TextStream)
+ On Error GoTo HandleErrors
+ Dim currentFunctionName As String
+ currentFunctionName = "WriteXMLResultsStartTag"
+
+ out.WriteLine "<results generated-by=""" & IIf(InDocPreparation, "documentanalysis_preparation", "documentanalysis") & """"
+ out.WriteLine " version=""" & GetVersion & """ timestamp=""" & Now & """"
+ out.WriteLine " type=""" & getAppSpecificApplicationName & """ >"
+
+FinalExit:
+ Exit Sub
+
+HandleErrors:
+ WriteDebug currentFunctionName & ": " & Err.Number & " " & Err.Description & " " & Err.Source
+ Resume FinalExit
+End Sub
+Sub WriteXMLResultsEndTag(out As TextStream)
+ On Error GoTo HandleErrors
+ Dim currentFunctionName As String
+ currentFunctionName = "WriteXMLResultsEndTag"
+
+ out.WriteLine "</results>"
+
+FinalExit:
+ Exit Sub
+
+HandleErrors:
+ WriteDebug currentFunctionName & ": " & Err.Number & " " & Err.Description & " " & Err.Source
+ Resume FinalExit
+End Sub
+
+Sub WriteXMLDocProperties(out As TextStream, aAnalysis As DocumentAnalysis)
+ On Error GoTo HandleErrors
+ Dim currentFunctionName As String
+ currentFunctionName = "WriteXMLDocProperties"
+
+ out.WriteLine "<document location=""" & EncodeXML(aAnalysis.name) & """"
+ out.WriteLine " application=""" & aAnalysis.Application & """"
+ out.WriteLine " issues-count=""" & (aAnalysis.IssuesCount) & """"
+ out.WriteLine " pages=""" & aAnalysis.PageCount & """"
+ out.WriteLine " created=""" & CheckDate(aAnalysis.Created) & """"
+ out.WriteLine " modified=""" & CheckDate(aAnalysis.Modified) & """"
+ out.WriteLine " accessed=""" & CheckDate(aAnalysis.Accessed) & """"
+ out.WriteLine " printed=""" & CheckDate(aAnalysis.Printed) & """"
+ out.WriteLine " last-save-by=""" & aAnalysis.SavedBy & """"
+ out.WriteLine " revision=""" & aAnalysis.Revision & """"
+ out.WriteLine " based-on-template=""" & EncodeXML(aAnalysis.Template) & """"
+ out.WriteLine ">"
+
+FinalExit:
+ Exit Sub
+
+HandleErrors:
+ WriteDebug currentFunctionName & " : path " & aAnalysis.name & ": " & Err.Number & " " & Err.Description & " " & Err.Source
+ Resume FinalExit
+End Sub
+
+Sub WriteXMLDocPropertiesEndTag(out As TextStream)
+ On Error GoTo HandleErrors
+ Dim currentFunctionName As String
+ currentFunctionName = "WriteXMLDocPropertiesEndTag"
+
+ out.WriteLine "</document>"
+
+FinalExit:
+ Exit Sub
+
+HandleErrors:
+ WriteDebug currentFunctionName & ": " & Err.Number & " " & Err.Description & " " & Err.Source
+ Resume FinalExit
+End Sub
+
+Sub WriteXMLDocRefDetails(out As TextStream, aAnalysis As DocumentAnalysis)
+ On Error GoTo HandleErrors
+ Dim currentFunctionName As String
+ currentFunctionName = "WriteXMLDocRefDetails"
+ Dim myIssue As IssueInfo
+
+ 'Output References for Docs with Macros
+ If aAnalysis.HasMacros And (aAnalysis.References.count > 0) Then
+ out.WriteLine "<references>"
+ For Each myIssue In aAnalysis.References
+ OutputXMLReferenceAttributes out, aAnalysis, myIssue
+ Next myIssue
+ out.WriteLine "</references>"
+ End If
+
+FinalExit:
+ Exit Sub
+
+HandleErrors:
+ WriteDebug currentFunctionName & " : path " & aAnalysis.name & ": " & Err.Number & " " & Err.Description & " " & Err.Source
+ Resume FinalExit
+End Sub
+
+Sub OutputXMLReferenceAttributes(out As TextStream, aAnalysis As DocumentAnalysis, myIssue As IssueInfo)
+ On Error GoTo HandleErrors
+ Dim currentFunctionName As String
+ currentFunctionName = "OutputXMLReferenceAttributes"
+ Dim strAttributes As String
+
+ With myIssue
+ out.WriteLine "<reference"
+
+ strAttributes = .Values("Major") & "." & .Values("Minor")
+ strAttributes = IIf(strAttributes = "0.0" Or strAttributes = ".", .Values("Name"), _
+ .Values("Name") & " " & .Values("Major") & "." & .Values("Minor"))
+ out.WriteLine " name=""" & EncodeXML(strAttributes) & """"
+
+ If .Values("Type") = "Project" Then
+ strAttributes = "Project reference"
+ Else
+ strAttributes = IIf(.Values("Description") <> "", .Values("Description"), RID_STR_COMMON_NA)
+ End If
+ out.WriteLine " description=""" & EncodeXML(strAttributes) & """"
+ If .Values("IsBroken") <> RID_STR_COMMON_ATTRIBUTE_BROKEN Then
+ out.WriteLine " location=""" & .Values("File") & """"
+ End If
+ out.WriteLine " type=""" & .Values("Type") & """"
+ strAttributes = IIf(.Values("GUID") <> "", .Values("GUID"), RID_STR_COMMON_NA)
+ out.WriteLine " GUID=""" & strAttributes & """"
+ out.WriteLine " is-broken=""" & .Values("IsBroken") & """"
+ out.WriteLine " builtin=""" & .Values("BuiltIn") & """"
+
+ out.WriteLine " />"
+ End With
+
+FinalExit:
+ Exit Sub
+
+HandleErrors:
+ WriteDebug currentFunctionName & " : path " & aAnalysis.name & " : myIssue " & myIssue.IssueTypeXML & "_" & myIssue.SubTypeXML & ": " & Err.Number & " " & Err.Description & " " & Err.Source
+ Resume FinalExit
+End Sub
+
+Sub WriteXMLDocIssueDetails(out As TextStream, aAnalysis As DocumentAnalysis)
+ On Error GoTo HandleErrors
+ Dim currentFunctionName As String
+ currentFunctionName = "WriteXMLDocIssueDetails"
+
+ Dim myIssue As IssueInfo
+
+ If aAnalysis.Issues.count = 0 Then Exit Sub
+
+ out.WriteLine "<issues>"
+ For Each myIssue In aAnalysis.Issues
+ OutputXMLCommonIssueDetails out, aAnalysis, myIssue
+ OutputXMLCommonIssueAttributes out, myIssue
+ out.WriteLine "</issue>"
+ Next myIssue
+ out.WriteLine "</issues>"
+
+FinalExit:
+ Exit Sub
+
+HandleErrors:
+ WriteDebug currentFunctionName & " : path " & aAnalysis.name & ": " & Err.Number & " " & Err.Description & " " & Err.Source
+ Resume FinalExit
+End Sub
+
+Sub OutputXMLCommonIssueDetails(out As TextStream, aAnalysis As DocumentAnalysis, myIssue As IssueInfo)
+ On Error GoTo HandleErrors
+ Dim currentFunctionName As String
+ currentFunctionName = "OutputXMLCommonIssueDetails"
+
+ out.WriteLine "<issue category=""" & myIssue.IssueTypeXML & """"
+ out.WriteLine " type=""" & myIssue.SubTypeXML & """"
+
+ 'NOTE: Dropping severity - now stored in results.xlt, do not want to open it to fetch this data
+ 'out.WriteLine " severity=""" & IIf(CheckForMinorIssue(aAnalysis, myIssue), "Minor", "Major") & """"
+ out.WriteLine " prepared=""" & IIf((myIssue.Preparable), "True", "False") & """ >"
+
+ out.WriteLine "<location type=""" & myIssue.locationXML & """ >"
+
+ If myIssue.SubLocation <> "" Then
+ out.WriteLine "<property name=""sublocation"" value=""" & myIssue.SubLocation & """ />"
+ End If
+ If myIssue.Line <> -1 Then
+ out.WriteLine "<property name=""line"" value=""" & myIssue.Line & """ />"
+ End If
+ If myIssue.column <> "" Then
+ out.WriteLine "<property name=""column"" value=""" & myIssue.column & """ />"
+ End If
+ out.WriteLine "</location>"
+
+FinalExit:
+ Exit Sub
+
+HandleErrors:
+ WriteDebug currentFunctionName & " : path " & aAnalysis.name & " : myIssue " & myIssue.IssueTypeXML & "_" & myIssue.SubTypeXML & ": " & Err.Number & " " & Err.Description & " " & Err.Source
+ Resume FinalExit
+End Sub
+
+Sub OutputXMLCommonIssueAttributes(out As TextStream, myIssue As IssueInfo)
+ On Error GoTo HandleErrors
+ Dim currentFunctionName As String
+ currentFunctionName = "OutputXMLCommonIssueAttributes"
+
+ Dim index As Integer
+ Dim valStr As String
+ Dim attStr As String
+
+ If myIssue.Attributes.count = 0 Then Exit Sub
+
+ out.WriteLine "<details>"
+ For index = 1 To myIssue.Attributes.count
+ attStr = myIssue.Attributes(index)
+ If InStr(attStr, RID_STR_COMMON_NOTE_PRE & "[") = 1 Then
+ attStr = Right$(attStr, Len(attStr) - Len(RID_STR_COMMON_NOTE_PRE & "["))
+ attStr = Left$(attStr, Len(attStr) - 1)
+ out.WriteLine "<note index=""" & attStr & """ value=""" & EncodeXML(myIssue.Values(index)) & """ />"
+ Else
+ out.WriteLine "<property name=""" & EncodeXML(myIssue.Attributes(index)) & """ value=""" & EncodeXML(myIssue.Values(index)) & """ />"
+ End If
+ Next index
+
+ out.WriteLine "</details>"
+
+FinalExit:
+ Exit Sub
+
+HandleErrors:
+ WriteDebug currentFunctionName & " : myIssue " & myIssue.IssueTypeXML & "_" & myIssue.SubTypeXML & ": " & Err.Number & " " & Err.Description & " " & Err.Source
+ Resume FinalExit
+End Sub
+
+
+Sub WriteXMLOutput(storeToDir As String, resultsFile As String, _
+ bOverwriteResultsFile As Boolean, bNewResultsFile As Boolean, AnalysedDocs As Collection, _
+ fso As Scripting.FileSystemObject)
+
+ On Error GoTo HandleErrors
+ Dim currentFunctionName As String
+ currentFunctionName = "WriteXMLOutput"
+
+ Dim xmlOutput As TextStream
+ Dim xmlOrigOutput As TextStream
+ Dim origOutput As String
+ Dim analysis As DocumentAnalysis
+ Dim outFilePath As String
+
+ outFilePath = storeToDir & "\" & fso.GetBaseName(resultsFile) & "_" & _
+ getAppSpecificApplicationName & ".xml"
+
+ Set xmlOutput = fso.CreateTextFile(outFilePath, True)
+ WriteXMLHeader xmlOutput
+
+ 'Set xmlOrigOutput = fso.OpenTextFile(outFilePath, ForReading)
+ 'Set xmlOutput = fso.OpenTextFile(outFilePath, ForWriting)
+
+ WriteXMLResultsStartTag xmlOutput
+ For Each analysis In AnalysedDocs
+ WriteXMLDocProperties xmlOutput, analysis
+ WriteXMLDocRefDetails xmlOutput, analysis
+ WriteXMLDocIssueDetails xmlOutput, analysis
+ WriteXMLDocPropertiesEndTag xmlOutput
+ Next analysis
+ WriteXMLResultsEndTag xmlOutput
+
+FinalExit:
+ xmlOutput.Close
+ Set xmlOutput = Nothing
+ Exit Sub
+
+HandleErrors:
+ WriteDebug currentFunctionName & " : path " & outFilePath & ": " & Err.Number & " " & Err.Description & " " & Err.Source
+ Resume FinalExit
+End Sub
+
+Private Function EncodeUrl(ByVal sUrl As String) As String
+ Const MAX_PATH As Long = 260
+ Const ERROR_SUCCESS As Long = 0
+ Const URL_DONT_SIMPLIFY As Long = &H8000000
+ On Error GoTo HandleErrors
+ Dim currentFunctionName As String
+ currentFunctionName = "EncodeUrl"
+
+ Dim sUrlEsc As String
+ Dim dwSize As Long
+ Dim dwFlags As Long
+
+ If Len(sUrl) > 0 Then
+
+ sUrlEsc = Space$(MAX_PATH)
+ dwSize = Len(sUrlEsc)
+ dwFlags = URL_DONT_SIMPLIFY
+
+ If UrlEscape(sUrl, _
+ sUrlEsc, _
+ dwSize, _
+ dwFlags) = ERROR_SUCCESS Then
+
+ EncodeUrl = Left$(sUrlEsc, dwSize)
+
+ End If 'If UrlEscape
+ End If 'If Len(sUrl) > 0
+
+FinalExit:
+ Exit Function
+
+HandleErrors:
+ WriteDebug currentFunctionName & " : sUrl " & sUrl & ": " & Err.Number & " " & Err.Description & " " & Err.Source
+ Resume FinalExit
+End Function
+
+Private Function EncodeXML(Str As String) As String
+ On Error GoTo HandleErrors
+ Dim currentFunctionName As String
+ currentFunctionName = "EncodeXML"
+
+ Str = Replace(Str, "^", "&#x5E;")
+ Str = Replace(Str, "&", "&amp;")
+ Str = Replace(Str, "`", "&apos;")
+ Str = Replace(Str, "{", "&#x7B;")
+ Str = Replace(Str, "}", "&#x7D;")
+ Str = Replace(Str, "|", "&#x7C;")
+ Str = Replace(Str, "]", "&#x5D;")
+ Str = Replace(Str, "[", "&#x5B;")
+ Str = Replace(Str, """", "&quot;")
+ Str = Replace(Str, "<", "&lt;")
+ Str = Replace(Str, ">", "&gt;")
+
+ 'str = Replace(str, "\", "&#x5C;")
+ 'str = Replace(str, "#", "&#x23;")
+ 'str = Replace(str, "?", "&#x3F;")
+ 'str = Replace(str, "/", "&#x2F;")
+
+ EncodeXML = Str
+
+FinalExit:
+ Exit Function
+
+HandleErrors:
+ WriteDebug currentFunctionName & " : string " & Str & ": " & Err.Number & " " & Err.Description & " " & Err.Source
+ Resume FinalExit
+End Function
+
+
+Function ReplaceTopicTokens(sString As String, _
+ sToken As String, _
+ sReplacement As String) As String
+ On Error Resume Next
+
+ Dim p As Integer
+ Dim sTmp As String
+
+ sTmp = sString
+ Do
+ p = InStr(sTmp, sToken)
+ If p Then
+ sTmp = Left(sTmp, p - 1) + sReplacement + Mid(sTmp, p + Len(sToken))
+ End If
+ Loop While p > 0
+
+
+ ReplaceTopicTokens = sTmp
+
+End Function
+
+Function ReplaceTopic2Tokens(sString As String, _
+ sToken1 As String, _
+ sReplacement1 As String, _
+ sToken2 As String, _
+ sReplacement2 As String) As String
+ On Error Resume Next
+
+ ReplaceTopic2Tokens = _
+ ReplaceTopicTokens(ReplaceTopicTokens(sString, sToken1, sReplacement1), _
+ sToken2, sReplacement2)
+End Function
+
+'Language setting functions
+Function GetResourceDataFileName(thisDir As String) As String
+ On Error GoTo HandleErrors
+ Dim currentFunctionName As String
+ currentFunctionName = "GetResourceDataFileName"
+
+ Dim fso As FileSystemObject
+ Set fso = New FileSystemObject
+
+ 'A debug method - if a file called debug.dat exists load it.
+ If fso.FileExists(fso.GetAbsolutePathName(thisDir & "\debug.dat")) Then
+ GetResourceDataFileName = fso.GetAbsolutePathName(thisDir & "\debug.dat")
+ GoTo FinalExit
+ End If
+
+ Dim isoLangStr As String
+ Dim isoCountryStr As String
+ Dim langDir As String
+
+ langDir = thisDir & "\" & "lang"
+
+ Dim userLCID As Long
+ userLCID = GetUserDefaultLangID()
+ Dim sysLCID As Long
+ sysLCID = GetSystemDefaultLangID()
+
+ isoLangStr = GetUserLocaleInfo(userLCID, LOCALE_SISO639LANGNAME)
+ isoCountryStr = GetUserLocaleInfo(userLCID, LOCALE_SISO3166CTRYNAME)
+
+ 'check for locale data in following order:
+ ' user language
+ ' isoLangStr & "_" & isoCountryStr & ".dat"
+ ' isoLangStr & ".dat"
+ ' system language
+ ' isoLangStr & "_" & isoCountryStr & ".dat"
+ ' isoLangStr & ".dat"
+ ' "en_US" & ".dat"
+
+ If fso.FileExists(fso.GetAbsolutePathName(langDir & "\" & isoLangStr & "-" & isoCountryStr & ".dat")) Then
+ GetResourceDataFileName = fso.GetAbsolutePathName(langDir & "\" & isoLangStr & "-" & isoCountryStr & ".dat")
+ ElseIf fso.FileExists(fso.GetAbsolutePathName(langDir & "\" & isoLangStr & ".dat")) Then
+ GetResourceDataFileName = fso.GetAbsolutePathName(langDir & "\" & isoLangStr & ".dat")
+ Else
+ isoLangStr = GetUserLocaleInfo(sysLCID, LOCALE_SISO639LANGNAME)
+ isoCountryStr = GetUserLocaleInfo(sysLCID, LOCALE_SISO3166CTRYNAME)
+
+ If fso.FileExists(fso.GetAbsolutePathName(langDir & "\" & isoLangStr & "-" & isoCountryStr & ".dat")) Then
+ GetResourceDataFileName = fso.GetAbsolutePathName(langDir & "\" & isoLangStr & "-" & isoCountryStr & ".dat")
+ ElseIf fso.FileExists(fso.GetAbsolutePathName(langDir & "\" & isoLangStr & ".dat")) Then
+ GetResourceDataFileName = fso.GetAbsolutePathName(langDir & "\" & isoLangStr & ".dat")
+ Else
+ GetResourceDataFileName = fso.GetAbsolutePathName(langDir & "\" & "en-US.dat")
+ End If
+ End If
+FinalExit:
+ Set fso = Nothing
+ Exit Function
+
+HandleErrors:
+ WriteDebug currentFunctionName & " : " & Err.Number & " " & Err.Description & " " & Err.Source
+ Resume FinalExit
+End Function
+
+Public Function GetUserLocaleInfo(ByVal dwLocaleID As Long, ByVal dwLCType As Long) As String
+ On Error GoTo HandleErrors
+ Dim currentFunctionName As String
+ currentFunctionName = "GetUserLocaleInfo"
+ Dim sReturn As String
+ Dim r As Long
+
+ 'call the function passing the Locale type
+ 'variable to retrieve the required size of
+ 'the string buffer needed
+ r = GetLocaleInfo(dwLocaleID, dwLCType, sReturn, Len(sReturn))
+
+ 'if successful..
+ If r Then
+ 'pad the buffer with spaces
+ sReturn = Space$(r)
+
+ 'and call again passing the buffer
+ r = GetLocaleInfo(dwLocaleID, dwLCType, sReturn, Len(sReturn))
+
+ 'if successful (r > 0)
+ If r Then
+ 'r holds the size of the string
+ 'including the terminating null
+ GetUserLocaleInfo = Left$(sReturn, r - 1)
+ End If
+ End If
+
+FinalExit:
+ Exit Function
+
+HandleErrors:
+ WriteDebug currentFunctionName & ": " & Err.Number & " " & Err.Description & " " & Err.Source
+ Resume FinalExit
+End Function
+
+' This function returns the Application Data Folder Path
+Function GetAppDataFolder() As String
+ Dim idlstr As Long
+ Dim sPath As String
+ Dim IDL As ITEMIDLIST
+ Const NOERROR = 0
+ Const MAX_LENGTH = 260
+ Const CSIDL_APPDATA = &H1A
+
+ On Error GoTo Err_GetFolder
+
+ ' Fill the idl structure with the specified folder item.
+ idlstr = SHGetSpecialFolderLocation(0, CSIDL_APPDATA, IDL)
+
+ If idlstr = NOERROR Then
+ ' Get the path from the idl list, and return
+ ' the folder with a slash at the end.
+ sPath = Space$(MAX_LENGTH)
+ idlstr = SHGetPathFromIDList(ByVal IDL.mkid.cb, ByVal sPath)
+ If idlstr Then
+ GetAppDataFolder = Left$(sPath, InStr(sPath, Chr$(0)) - 1)
+ End If
+ End If
+
+Exit_GetFolder:
+ Exit Function
+
+Err_GetFolder:
+ MsgBox "An Error was Encountered" & Chr(13) & Err.Description, _
+ vbCritical Or vbOKOnly
+ Resume Exit_GetFolder
+
+End Function
+
+Sub WriteToStatFile(statFileName As String, statValue As Integer, _
+ currDocument As String, fso As Scripting.FileSystemObject)
+
+ On Error Resume Next
+
+ Dim fileCont As TextStream
+
+ Set fileCont = fso.OpenTextFile(statFileName, ForWriting, True, TristateTrue)
+ If (statValue = C_STAT_STARTING) Then
+ fileCont.WriteLine ("analysing=" & currDocument)
+ ElseIf (statValue = C_STAT_DONE) Then
+ fileCont.WriteLine ("analysed=" & currDocument)
+ ElseIf (statValue = C_STAT_FINISHED) Then
+ fileCont.WriteLine ("finished")
+ End If
+
+ fileCont.Close
+End Sub
+
+' The function FindIndex looks for a document in the given document list
+' starting at the position lastIndex in that list. If the document could
+' not be found, the function starts searching from the beginning
+
+Function FindIndex(myDocument As String, _
+ myDocList As Collection, _
+ lastIndex As Long) As Long
+
+ Dim lastEntry As Long
+ Dim curIndex As Long
+ Dim curEntry As String
+ Dim entryFound As Boolean
+
+ entryFound = False
+ lastEntry = myDocList.count
+
+ If (lastIndex > lastEntry) Then lastIndex = lastEntry
+
+ If (lastIndex > 1) Then
+ curIndex = lastIndex
+ Else
+ curIndex = 1
+ End If
+
+ While Not entryFound And curIndex <= lastEntry
+ curEntry = myDocList.item(curIndex)
+ If (curEntry = myDocument) Then
+ entryFound = True
+ Else
+ curIndex = curIndex + 1
+ End If
+ Wend
+
+ If (Not entryFound) Then
+ curIndex = 1
+ While Not entryFound And curIndex < lastIndex
+ curEntry = myDocList.item(curIndex)
+ If (curEntry = myDocument) Then
+ entryFound = True
+ Else
+ curIndex = curIndex + 1
+ End If
+ Wend
+ End If
+
+ If entryFound Then
+ FindIndex = curIndex
+ Else
+ FindIndex = 0
+ End If
+
+End Function
+
+' The sub GetIndexValues calulates the start index of the analysis and the index
+' of the file after which the next intermediate reult will be written
+Function GetIndexValues(startIndex As Long, nextCheck As Long, _
+ myFiles As Collection) As Boolean
+
+ Dim lastCheckpoint As String
+ Dim nextFile As String
+ Dim newResultsFile As Boolean
+
+ lastCheckpoint = ProfileGetItem(C_ANALYSIS, C_LAST_CHECKPOINT, "", mIniFilePath)
+ nextFile = ProfileGetItem(C_ANALYSIS, C_NEXT_FILE, "", mIniFilePath)
+ newResultsFile = True
+
+ If (nextFile = "") Then
+ ' No Analysis done yet
+ startIndex = 1
+ nextCheck = C_MAX_CHECK
+ Else
+ If (lastCheckpoint = "") Then
+ startIndex = 1
+ Else
+ startIndex = FindIndex(lastCheckpoint, myFiles, 1) + 1
+ If (startIndex > 0) Then newResultsFile = False
+ End If
+
+ nextCheck = FindIndex(nextFile, myFiles, startIndex - 1)
+
+ If (nextCheck = 0) Then ' Next file not in file list, restarting
+ startIndex = 1
+ nextCheck = C_MAX_CHECK
+ newResultsFile = True
+ ElseIf (nextCheck < startIndex) Then 'we are done?
+ nextCheck = startIndex + C_MAX_CHECK
+ ElseIf (nextCheck = startIndex) Then 'skip this one
+ WriteToLog C_ERROR_HANDLING_DOC & nextCheck, nextFile
+ startIndex = startIndex + 1
+ nextCheck = startIndex + C_MAX_CHECK
+ Else 'last time an error occured with that file, write before analysing
+ nextCheck = nextCheck - 1
+ End If
+ End If
+ GetIndexValues = newResultsFile
+End Function
+
+Private Sub GetDocModificationDates(docCounts As DocModificationDates)
+
+ On Error GoTo HandleErrors
+ Dim currentFunctionName As String
+ currentFunctionName = "GetDocModificationDates"
+
+ docCounts.lessThanThreemonths = CLng(ProfileGetItem("Analysis", C_DOCS_LESS_3_MONTH, "0", mIniFilePath))
+ docCounts.threeToSixmonths = CLng(ProfileGetItem("Analysis", C_DOCS_LESS_6_MONTH, "0", mIniFilePath))
+ docCounts.sixToTwelvemonths = CLng(ProfileGetItem("Analysis", C_DOCS_LESS_12_MONTH, "0", mIniFilePath))
+ docCounts.greaterThanOneYear = CLng(ProfileGetItem("Analysis", C_DOCS_MORE_12_MONTH, "0", mIniFilePath))
+
+FinalExit:
+ Exit Sub
+HandleErrors:
+ WriteDebug currentFunctionName & " : " & Err.Number & " " & Err.Description & " " & Err.Source
+ Resume FinalExit
+End Sub
diff --git a/migrationanalysis/src/driver_docs/sources/CollectedFiles.cls b/migrationanalysis/src/driver_docs/sources/CollectedFiles.cls
new file mode 100644
index 000000000000..6871b34c1471
--- /dev/null
+++ b/migrationanalysis/src/driver_docs/sources/CollectedFiles.cls
@@ -0,0 +1,380 @@
+VERSION 1.0 CLASS
+BEGIN
+ MultiUse = -1 'True
+END
+Attribute VB_Name = "CollectedFiles"
+Attribute VB_GlobalNameSpace = False
+Attribute VB_Creatable = False
+Attribute VB_PredeclaredId = False
+Attribute VB_Exposed = False
+'/*************************************************************************
+' *
+' * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+' *
+' * Copyright 2008 by Sun Microsystems, Inc.
+' *
+' * OpenOffice.org - a multi-platform office productivity suite
+' *
+' * $RCSfile: CollectedFiles.cls,v $
+' *
+' * This file is part of OpenOffice.org.
+' *
+' * OpenOffice.org is free software: you can redistribute it and/or modify
+' * it under the terms of the GNU Lesser General Public License version 3
+' * only, as published by the Free Software Foundation.
+' *
+' * OpenOffice.org is distributed in the hope that it will be useful,
+' * but WITHOUT ANY WARRANTY; without even the implied warranty of
+' * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+' * GNU Lesser General Public License version 3 for more details
+' * (a copy is included in the LICENSE file that accompanied this code).
+' *
+' * You should have received a copy of the GNU Lesser General Public License
+' * version 3 along with OpenOffice.org. If not, see
+' * <http://www.openoffice.org/license.html>
+' * for a copy of the LGPLv3 License.
+' *
+' ************************************************************************/
+Option Explicit
+
+Private Const vbDot = 46
+Private Const MAX_PATH = 260
+Private Const INVALID_HANDLE_VALUE = -1
+Private Const vbBackslash = "\"
+Private Const ALL_FILES = "*.*"
+
+Private Type FILETIME
+ dwLowDateTime As Long
+ dwHighDateTime As Long
+End Type
+
+Private Type WIN32_FIND_DATA
+ dwFileAttributes As Long
+ ftCreationTime As FILETIME
+ ftLastAccessTime As FILETIME
+ ftLastWriteTime As FILETIME
+ nFileSizeHigh As Long
+ nFileSizeLow As Long
+ dwReserved0 As Long
+ dwReserved1 As Long
+ cFileName As String * MAX_PATH
+ cAlternate As String * 14
+End Type
+
+Private Type FILE_PARAMS
+ bRecurse As Boolean
+ nSearched As Long
+ sFileNameExt As String
+ sFileRoot As String
+End Type
+
+Private Declare Function FindClose Lib "kernel32" _
+ (ByVal hFindFile As Long) As Long
+
+Private Declare Function FindFirstFile Lib "kernel32" _
+ Alias "FindFirstFileA" _
+ (ByVal lpFileName As String, _
+ lpFindFileData As WIN32_FIND_DATA) As Long
+
+Private Declare Function FindNextFile Lib "kernel32" _
+ Alias "FindNextFileA" _
+ (ByVal hFindFile As Long, _
+ lpFindFileData As WIN32_FIND_DATA) As Long
+
+Private Declare Function GetTickCount Lib "kernel32" () As Long
+
+Private Declare Function lstrlen Lib "kernel32" _
+ Alias "lstrlenW" (ByVal lpString As Long) As Long
+
+Private Declare Function PathMatchSpec Lib "shlwapi" _
+ Alias "PathMatchSpecW" _
+ (ByVal pszFileParam As Long, _
+ ByVal pszSpec As Long) As Long
+
+Private fp As FILE_PARAMS 'holds search parameters
+
+Private mWordFilesCol As Collection
+Private mExcelFilesCol As Collection
+Private mPPFilesCol As Collection
+
+Private mDocCount As Long
+Private mDotCount As Long
+Private mXlsCount As Long
+Private mXltCount As Long
+Private mPptCount As Long
+Private mPotCount As Long
+Private mbDocSearch As Boolean
+Private mbDotSearch As Boolean
+Private mbXlsSearch As Boolean
+Private mbXltSearch As Boolean
+Private mbPptSearch As Boolean
+Private mbPotSearch As Boolean
+
+Private mBannedList As Collection
+
+Private Sub Class_Initialize()
+ Set mWordFilesCol = New Collection
+ Set mExcelFilesCol = New Collection
+ Set mPPFilesCol = New Collection
+ Set mBannedList = New Collection
+End Sub
+Private Sub Class_Terminate()
+ Set mWordFilesCol = Nothing
+ Set mExcelFilesCol = Nothing
+ Set mPPFilesCol = Nothing
+ Set mBannedList = Nothing
+End Sub
+
+Public Property Get BannedList() As Collection
+ Set BannedList = mBannedList
+End Property
+Public Property Let BannedList(ByVal theList As Collection)
+ Set mBannedList = theList
+End Property
+
+Public Property Get DocCount() As Long
+ DocCount = mDocCount
+End Property
+Public Property Get DotCount() As Long
+ DotCount = mDotCount
+End Property
+Public Property Get XlsCount() As Long
+ XlsCount = mXlsCount
+End Property
+Public Property Get XltCount() As Long
+ XltCount = mXltCount
+End Property
+Public Property Get PptCount() As Long
+ PptCount = mPptCount
+End Property
+Public Property Get PotCount() As Long
+ PotCount = mPotCount
+End Property
+
+Public Property Get WordFiles() As Collection
+ Set WordFiles = mWordFilesCol
+End Property
+Public Property Get ExcelFiles() As Collection
+ Set ExcelFiles = mExcelFilesCol
+End Property
+Public Property Get PowerPointFiles() As Collection
+ Set PowerPointFiles = mPPFilesCol
+End Property
+
+Public Function count() As Long
+ count = mWordFilesCol.count + mExcelFilesCol.count + mPPFilesCol.count
+End Function
+
+
+Public Function Search(rootDir As String, _
+ FileSpecs As Collection, IncludeSubdirs As Boolean)
+ On Error GoTo HandleErrors
+ Dim currentFunctionName As String
+ currentFunctionName = "Search"
+
+ Dim tstart As Single 'timer var for this routine only
+ Dim tend As Single 'timer var for this routine only
+ Dim spec As Variant
+ Dim allSpecs As String
+ Dim fso As New FileSystemObject
+
+ If FileSpecs.count = 0 Then Exit Function
+
+ If FileSpecs.count > 1 Then
+ For Each spec In FileSpecs
+ allSpecs = allSpecs & "; " & spec
+ SetSearchBoolean CStr(spec)
+ Next
+ Else
+ allSpecs = FileSpecs(1)
+ SetSearchBoolean CStr(FileSpecs(1))
+ End If
+
+ With fp
+ .sFileRoot = QualifyPath(rootDir)
+ .sFileNameExt = allSpecs
+ .bRecurse = IncludeSubdirs
+ .nSearched = 0
+ End With
+
+ tstart = GetTickCount()
+ Call SearchForFiles(fp.sFileRoot)
+ tend = GetTickCount()
+
+ 'Debug:
+ 'MsgBox "Specs " & allSpecs & vbLf & _
+ ' Format$(fp.nSearched, "###,###,###,##0") & vbLf & _
+ ' Format$(count, "###,###,###,##0") & vbLf & _
+ ' FormatNumber((tend - tstart) / 1000, 2) & " seconds"
+
+FinalExit:
+ Set fso = Nothing
+ Exit Function
+
+HandleErrors:
+ WriteDebug currentFunctionName & " : " & Err.Number & " " & Err.Description & " " & Err.Source
+ Resume FinalExit
+End Function
+Function isBannedFile(thePath As String) As Boolean
+
+ Dim aPath As Variant
+ Dim theResult As Boolean
+ theResult = False
+ For Each aPath In mBannedList
+ If aPath = thePath Then
+ theResult = True
+ GoTo FinalExit
+ End If
+ Next
+
+FinalExit:
+ isBannedFile = theResult
+End Function
+Sub SetSearchBoolean(spec As String)
+
+ If spec = "*.doc" Then
+ mbDocSearch = True
+ End If
+ If spec = "*.dot" Then
+ mbDotSearch = True
+ End If
+ If spec = "*.xls" Then
+ mbXlsSearch = True
+ End If
+ If spec = "*.xlt" Then
+ mbXltSearch = True
+ End If
+ If spec = "*.ppt" Then
+ mbPptSearch = True
+ End If
+ If spec = "*.pot" Then
+ mbPotSearch = True
+ End If
+
+End Sub
+
+Private Sub SearchForFiles(sRoot As String)
+ On Error GoTo HandleErrors
+ Dim currentFunctionName As String
+ currentFunctionName = "SearchForFiles"
+
+ Dim WFD As WIN32_FIND_DATA
+ Dim hFile As Long
+ Dim path As String
+ Dim WordDriverPathTemp As String
+ Dim ExcelDriverPathTemp As String
+ Dim PPDriverPathTemp As String
+
+ hFile = FindFirstFile(sRoot & ALL_FILES, WFD)
+
+ If hFile = INVALID_HANDLE_VALUE Then GoTo FinalExit
+
+ Do
+ 'if a folder, and recurse specified, call
+ 'method again
+ If (WFD.dwFileAttributes And vbDirectory) Then
+ If Asc(WFD.cFileName) <> vbDot Then
+ If fp.bRecurse Then
+ SearchForFiles sRoot & TrimNull(WFD.cFileName) & vbBackslash
+ End If
+ End If
+ Else
+ 'must be a file..
+ If mbDocSearch Then
+ If MatchSpec(WFD.cFileName, "*.doc") Then
+ path = sRoot & TrimNull(WFD.cFileName)
+ 'If StrComp(path, mWordDriverPath, vbTextCompare) <> 0 Then
+ If Not isBannedFile(path) Then
+ mDocCount = mDocCount + 1
+ mWordFilesCol.Add path
+ GoTo CONTINUE_LOOP
+ End If
+ End If
+ End If
+ If mbDotSearch Then
+ If MatchSpec(WFD.cFileName, "*.dot") Then
+ mDotCount = mDotCount + 1
+ mWordFilesCol.Add sRoot & TrimNull(WFD.cFileName)
+ GoTo CONTINUE_LOOP
+ End If
+ End If
+ If mbXlsSearch Then
+ If MatchSpec(WFD.cFileName, "*.xls") Then
+ path = sRoot & TrimNull(WFD.cFileName)
+ 'If StrComp(TrimNull(WFD.cFileName), CEXCEL_DRIVER_FILE, vbTextCompare) <> 0 Then
+ If Not isBannedFile(path) Then
+ mXlsCount = mXlsCount + 1
+ mExcelFilesCol.Add sRoot & TrimNull(WFD.cFileName)
+ GoTo CONTINUE_LOOP
+ End If
+ End If
+ End If
+ If mbXltSearch Then
+ If MatchSpec(WFD.cFileName, "*.xlt") Then
+ mXltCount = mXltCount + 1
+ mExcelFilesCol.Add sRoot & TrimNull(WFD.cFileName)
+ GoTo CONTINUE_LOOP
+ End If
+ End If
+ If mbPptSearch Then
+ If MatchSpec(WFD.cFileName, "*.ppt") Then
+ path = sRoot & TrimNull(WFD.cFileName)
+ 'If StrComp(path, mPPDriverPath, vbTextCompare) <> 0 Then
+ If Not isBannedFile(path) Then
+ mPptCount = mPptCount + 1
+ mPPFilesCol.Add path
+ GoTo CONTINUE_LOOP
+ End If
+ End If
+ End If
+ If mbPotSearch Then
+ If MatchSpec(WFD.cFileName, "*.pot") Then
+ mPotCount = mPotCount + 1
+ mPPFilesCol.Add sRoot & TrimNull(WFD.cFileName)
+ GoTo CONTINUE_LOOP
+ End If
+ End If
+
+ End If 'If WFD.dwFileAttributes
+
+CONTINUE_LOOP:
+ fp.nSearched = fp.nSearched + 1
+
+ Loop While FindNextFile(hFile, WFD)
+
+FinalExit:
+ Call FindClose(hFile)
+ Exit Sub
+
+HandleErrors:
+ WriteDebug currentFunctionName & " : " & Err.Number & " " & Err.Description & " " & Err.Source
+ Resume FinalExit
+End Sub
+
+
+Private Function QualifyPath(sPath As String) As String
+
+ If Right$(sPath, 1) <> vbBackslash Then
+ QualifyPath = sPath & vbBackslash
+ Else: QualifyPath = sPath
+ End If
+
+End Function
+
+
+Private Function TrimNull(startstr As String) As String
+
+ TrimNull = Left$(startstr, lstrlen(StrPtr(startstr)))
+
+End Function
+
+
+Private Function MatchSpec(sFile As String, sSpec As String) As Boolean
+
+ MatchSpec = PathMatchSpec(StrPtr(sFile), StrPtr(sSpec))
+
+End Function
+
+
+
+
diff --git a/migrationanalysis/src/driver_docs/sources/CommonMigrationAnalyser.bas b/migrationanalysis/src/driver_docs/sources/CommonMigrationAnalyser.bas
new file mode 100644
index 000000000000..d165054fa7b0
--- /dev/null
+++ b/migrationanalysis/src/driver_docs/sources/CommonMigrationAnalyser.bas
@@ -0,0 +1,1121 @@
+Attribute VB_Name = "CommonMigrationAnalyser"
+'/*************************************************************************
+' *
+' * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+' *
+' * Copyright 2008 by Sun Microsystems, Inc.
+' *
+' * OpenOffice.org - a multi-platform office productivity suite
+' *
+' * $RCSfile: CommonMigrationAnalyser.bas,v $
+' *
+' * This file is part of OpenOffice.org.
+' *
+' * OpenOffice.org is free software: you can redistribute it and/or modify
+' * it under the terms of the GNU Lesser General Public License version 3
+' * only, as published by the Free Software Foundation.
+' *
+' * OpenOffice.org is distributed in the hope that it will be useful,
+' * but WITHOUT ANY WARRANTY; without even the implied warranty of
+' * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+' * GNU Lesser General Public License version 3 for more details
+' * (a copy is included in the LICENSE file that accompanied this code).
+' *
+' * You should have received a copy of the GNU Lesser General Public License
+' * version 3 along with OpenOffice.org. If not, see
+' * <http://www.openoffice.org/license.html>
+' * for a copy of the LGPLv3 License.
+' *
+' ************************************************************************/
+
+Option Explicit
+
+
+'***********************************************
+'**** APPLICATION COMMON ANALYSIS FUNCTIONS ****
+'***********************************************
+
+'** Common - XML Issue and SubIssue strings
+'For preparation - need access to some Word/ Excel or PP consts
+Public Const CSTR_ISSUE_OBJECTS_GRAPHICS_AND_FRAMES = "ObjectsGraphicsAndFrames"
+Public Const CSTR_SUBISSUE_OBJECT_IN_HEADER_FOOTER = "ObjectInHeaderFooter"
+
+Public Const CSTR_ISSUE_INFORMATION = "Information"
+Public Const CSTR_ISSUE_CONTENT_DOCUMENT_PROPERTIES = "ContentAndDocumentProperties"
+Public Const CSTR_ISSUE_FORMAT = "Format"
+Public Const CSTR_ISSUE_PORTABILITY = "Portability"
+Public Const CSTR_ISSUE_VBA_MACROS = "VBAMacros"
+
+Public Const CSTR_SUBISSUE_DOCUMENT_PARTS_PROTECTION = "DocumentPartsProtection"
+Public Const CSTR_SUBISSUE_EXTERNAL_REFERENCES_IN_MACRO = "ExternalReferencesInMacro"
+Public Const CSTR_SUBISSUE_EXTERNAL_REFERENCES_IN_MACRO_COUNT = "ExternalReferencesInMacroCount"
+Public Const CSTR_SUBISSUE_GRADIENT = "Gradient"
+Public Const CSTR_SUBISSUE_INVALID_PASSWORD_ENTERED = "InvalidPasswordEntered"
+Public Const CSTR_SUBISSUE_LINE = "Line"
+Public Const CSTR_SUBISSUE_MACRO_PASSWORD_PROTECTION = "PasswordProtected"
+Public Const CSTR_SUBISSUE_OLD_WORKBOOK_VERSION = "OldWorkbookVersion"
+Public Const CSTR_SUBISSUE_OLE_EMBEDDED = "EmbeddedOLEObject"
+Public Const CSTR_SUBISSUE_OLE_LINKED = "LinkedOLEObject"
+Public Const CSTR_SUBISSUE_OLE_CONTROL = "OLEControl"
+Public Const CSTR_SUBISSUE_OLE_FIELD_LINK = "OLEFieldLink"
+Public Const CSTR_SUBISSUE_OLE_UNKNOWN = "UnknownType"
+Public Const CSTR_SUBISSUE_PASSWORDS_PROTECTION = "PasswordProtection"
+Public Const CSTR_SUBISSUE_PROPERTIES = "Properties"
+Public Const CSTR_SUBISSUE_REFERENCES = "References"
+Public Const CSTR_SUBISSUE_TRANSPARENCY = "Transparency"
+Public Const CSTR_SUBISSUE_VBA_MACROS_NUMLINES = "NumberOfLines"
+Public Const CSTR_SUBISSUE_VBA_MACROS_USERFORMS_COUNT = "UserFormsCount"
+Public Const CSTR_SUBISSUE_VBA_MACROS_USERFORMS_CONTROL_COUNT = "UserFormsControlCount"
+Public Const CSTR_SUBISSUE_VBA_MACROS_USERFORMS_CONTROLTYPE_COUNT = "UserFormsControlTypeCount"
+Public Const CSTR_SUBISSUE_VBA_MACROS_UNIQUE_MODULE_COUNT = "UniqueModuleCount"
+Public Const CSTR_SUBISSUE_VBA_MACROS_UNIQUE_LINE_COUNT = "UniqueLineCount"
+'** END Common - XML Issue and SubIssue strings
+
+'Macro classification bounds
+Public Const CMACRO_LINECOUNT_MEDIUM_LBOUND = 50
+
+'Don't localize folder name
+Public Const CSTR_COMMON_PREPARATION_FOLDER = "prepared"
+
+
+Public Enum EnumDocOverallMacroClass
+ enMacroNone = 0
+ enMacroSimple = 1
+ enMacroMedium = 2
+ enMacroComplex = 3
+End Enum
+Public Enum EnumDocOverallIssueClass
+ enNone = 0
+ enMinor = 1
+ enComplex = 2
+End Enum
+
+Sub EmptyCollection(docAnalysis As DocumentAnalysis, coll As Collection)
+ On Error GoTo HandleErrors
+ Dim currentFunctionName As String
+ currentFunctionName = "EmptyCollection"
+ Dim Num As Long
+ For Num = 1 To coll.count ' Remove name from the collection.
+ coll.Remove 1 ' Default collection numeric indexes
+ Next ' begin at 1.
+ Exit Sub
+
+HandleErrors:
+ WriteDebug currentFunctionName & " : " & docAnalysis.name & ": " & Err.Number & " " & Err.Description & " " & Err.Source
+End Sub
+
+Public Function Analyze_Macros(docAnalysis As DocumentAnalysis, _
+ userFormTypesDict As Scripting.Dictionary, _
+ currDoc As Object)
+ On Error GoTo HandleErrors
+ Dim currentFunctionName As String
+ currentFunctionName = "Analyze_Macros"
+ Dim macroDetails As String
+ Dim cmpDetails As String
+ Dim myProject As VBProject
+ Dim myComponent As VBComponent
+ Dim numLines As Long
+ Dim myIssue As IssueInfo
+ Dim wrd As Object
+ Dim bUserFormWithEmptyCodeModule As Boolean
+
+ On Error Resume Next
+ Set myProject = getAppSpecificVBProject(currDoc)
+ If Err.Number <> 0 Then
+ ' Failed to get access to VBProject
+ WriteDebug currentFunctionName & " : " & docAnalysis.name & ": " & _
+ RID_STR_COMMON_ATTRIBUTE_UNABLE_TO_ACCESS_VBPROJECT & ":" & _
+ RID_STR_COMMON_ATTRIBUTE_FURTHER_MACRO_ANALYSIS_NOT_POSSIBLE
+
+ GoTo FinalExit
+ End If
+
+ On Error GoTo HandleErrors
+ If myProject.Protection = vbext_pp_locked Then
+ Set myIssue = New IssueInfo
+ With myIssue
+ .IssueID = CID_VBA_MACROS
+ .IssueType = RID_STR_COMMON_ISSUE_VBA_MACROS
+ .SubType = RID_STR_COMMON_SUBISSUE_MACRO_PASSWORD_PROTECTION
+ .Location = .CLocationDocument
+
+ .IssueTypeXML = CSTR_ISSUE_VBA_MACROS
+ .SubTypeXML = CSTR_SUBISSUE_MACRO_PASSWORD_PROTECTION
+ .locationXML = .CXMLLocationDocument
+
+ .Attributes.Add RID_STR_COMMON_ATTRIBUTE_VBPROJECT_PASSWORD
+ .Values.Add RID_STR_COMMON_ATTRIBUTE_FURTHER_MACRO_ANALYSIS_NOT_POSSIBLE
+ End With
+ docAnalysis.IssuesCountArray(CID_VBA_MACROS) = _
+ docAnalysis.IssuesCountArray(CID_VBA_MACROS) + 1
+ docAnalysis.Issues.Add myIssue
+ docAnalysis.MacroIssuesCount = docAnalysis.MacroIssuesCount + 1
+
+ docAnalysis.HasMacros = True
+ GoTo FinalExit
+ End If
+
+ Dim myContolDict As Scripting.Dictionary
+ For Each myComponent In myProject.VBComponents
+
+ bUserFormWithEmptyCodeModule = False
+ If CheckEmptyProject(docAnalysis, myProject, myComponent) Then
+ If myComponent.Type <> vbext_ct_MSForm Then
+ GoTo FOREACH_CONTINUE
+ Else
+ bUserFormWithEmptyCodeModule = True
+ End If
+ End If
+
+ Analyze_MacrosForPortabilityIssues docAnalysis, myProject, myComponent
+
+ Set myIssue = New IssueInfo
+ With myIssue
+ .IssueID = CID_VBA_MACROS
+ .IssueType = RID_STR_COMMON_ISSUE_VBA_MACROS
+ .SubType = RID_STR_COMMON_SUBISSUE_PROPERTIES
+ .Location = .CLocationDocument
+
+ .IssueTypeXML = CSTR_ISSUE_VBA_MACROS
+ .SubTypeXML = CSTR_SUBISSUE_PROPERTIES
+ .locationXML = .CXMLLocationDocument
+
+ .SubLocation = VBComponentType(myComponent)
+ .Attributes.Add RID_STR_COMMON_ATTRIBUTE_PROJECT
+ .Values.Add myProject.name
+ .Attributes.Add RID_STR_COMMON_ATTRIBUTE_COMPONENT
+ .Values.Add myComponent.name
+ .Attributes.Add RID_STR_COMMON_ATTRIBUTE_PROCEDURES
+ .Values.Add VBNumFuncs(docAnalysis, myComponent.CodeModule), RID_STR_COMMON_ATTRIBUTE_PROCEDURES
+ .Attributes.Add RID_STR_COMMON_ATTRIBUTE_NUMBER_OF_LINES
+ numLines = VBNumLines(docAnalysis, myComponent.CodeModule)
+ .Values.Add numLines, RID_STR_COMMON_ATTRIBUTE_NUMBER_OF_LINES
+
+ If bUserFormWithEmptyCodeModule Then
+ .Attributes.Add RID_STR_COMMON_ATTRIBUTE_SIGNATURE
+ .Values.Add RID_STR_COMMON_NA, RID_STR_COMMON_ATTRIBUTE_SIGNATURE
+ Else
+ .Attributes.Add RID_STR_COMMON_ATTRIBUTE_SIGNATURE
+ .Values.Add MD5HashString( _
+ myComponent.CodeModule.Lines(1, myComponent.CodeModule.CountOfLines)), _
+ RID_STR_COMMON_ATTRIBUTE_SIGNATURE
+ End If
+
+ docAnalysis.MacroTotalNumLines = numLines + docAnalysis.MacroTotalNumLines
+ End With
+
+ ' User Forms - control details
+ If (myComponent.Type = vbext_ct_MSForm) And Not bUserFormWithEmptyCodeModule Then
+ myIssue.Attributes.Add RID_STR_COMMON_ATTRIBUTE_CONTROLS
+ myIssue.Values.Add myComponent.Designer.Controls.count, RID_STR_COMMON_ATTRIBUTE_CONTROLS
+ docAnalysis.MacroNumUserForms = 1 + docAnalysis.MacroNumUserForms
+ docAnalysis.MacroNumUserFormControls = myComponent.Designer.Controls.count + docAnalysis.MacroNumUserFormControls
+
+ Dim myControl As Control
+ Dim controlTypes As String
+ Dim myType As String
+
+ Set myContolDict = New Scripting.Dictionary
+
+ For Each myControl In myComponent.Designer.Controls
+ myType = TypeName(myControl)
+ If myContolDict.Exists(myType) Then
+ myContolDict.item(myType) = myContolDict.item(myType) + 1
+ Else
+ myContolDict.Add myType, 1
+ End If
+ If userFormTypesDict.Exists(myType) Then
+ userFormTypesDict.item(myType) = userFormTypesDict.item(myType) + 1
+ Else
+ userFormTypesDict.Add myType, 1
+ End If
+ Next
+
+ If myComponent.Designer.Controls.count > 0 Then
+ Dim count As Long
+ Dim vKeyArray As Variant
+ Dim vItemArray As Variant
+
+ vKeyArray = myContolDict.Keys
+ vItemArray = myContolDict.Items
+
+ controlTypes = ""
+ For count = 0 To myContolDict.count - 1
+ controlTypes = controlTypes & vKeyArray(count) & " " & CInt(vItemArray(count)) & " "
+ Next count
+ myIssue.Attributes.Add RID_STR_COMMON_ATTRIBUTE_USERFORM_TYPE
+ myIssue.Values.Add controlTypes, RID_STR_COMMON_ATTRIBUTE_USERFORM_TYPE
+
+ myIssue.Attributes.Add RID_STR_COMMON_ATTRIBUTE_USERFORM_TYPES_COUNT
+ myIssue.Values.Add myContolDict.count, RID_STR_COMMON_ATTRIBUTE_USERFORM_TYPES_COUNT
+
+ docAnalysis.MacroNumUserFormControlTypes = myContolDict.count + docAnalysis.MacroNumUserFormControlTypes
+ End If
+ Set myContolDict = Nothing
+ End If
+
+ 'Check for occurence of " Me " in Form and Class Modules
+ If myComponent.Type = vbext_ct_MSForm Or _
+ myComponent.Type = vbext_ct_ClassModule Then
+
+ Dim strFind As String
+ strFind = ""
+ count = 0
+ strFind = VBFindLines(docAnalysis, myComponent.CodeModule, "Me", count, bWholeWord:=True)
+' If (strFind <> "") Then MsgBox strFind
+
+ If count > 0 Then
+ myIssue.Attributes.Add RID_STR_COMMON_ATTRIBUTE_CLASS_ME_COUNT
+ myIssue.Values.Add count, RID_STR_COMMON_ATTRIBUTE_CLASS_ME_COUNT
+ End If
+ End If
+
+ docAnalysis.IssuesCountArray(CID_VBA_MACROS) = _
+ docAnalysis.IssuesCountArray(CID_VBA_MACROS) + 1
+ docAnalysis.Issues.Add myIssue
+ docAnalysis.MacroIssuesCount = docAnalysis.MacroIssuesCount + 1
+
+ Set myIssue = Nothing
+
+FOREACH_CONTINUE:
+ 'No equiv to C continue in VB
+ Next myComponent 'End - For Each myComponent
+
+ If docAnalysis.IssuesCountArray(CID_VBA_MACROS) > 0 Then
+ Analyze_VBEReferences docAnalysis, currDoc
+ docAnalysis.HasMacros = True
+ End If
+
+FinalExit:
+ docAnalysis.MacroOverallClass = ClassifyDocOverallMacroClass(docAnalysis)
+
+ Set myProject = Nothing
+ Set myIssue = Nothing
+ Set myContolDict = Nothing
+ Exit Function
+
+HandleErrors:
+ WriteDebug currentFunctionName & " : " & docAnalysis.name & ": " & Err.Number & " " & Err.Description & " " & Err.Source
+ Resume FinalExit
+End Function
+
+Function CheckOnlyEmptyProject(docAnalysis As DocumentAnalysis, currDoc As Object) As Boolean
+ On Error GoTo HandleErrors
+ Dim currentFunctionName As String
+ currentFunctionName = "CheckOnlyEmptyProject"
+ Dim myProject As VBProject
+ Set myProject = getAppSpecificVBProject(currDoc)
+ Dim myVBComponent As VBComponent
+
+ For Each myVBComponent In myProject.VBComponents
+ If Not CheckEmptyProject(docAnalysis, myProject, myVBComponent) Then
+ CheckOnlyEmptyProject = False
+ GoTo FinalExit
+ End If
+ Next myVBComponent
+
+ CheckOnlyEmptyProject = True
+
+FinalExit:
+ Set myProject = Nothing
+ Exit Function
+
+HandleErrors:
+ WriteDebug currentFunctionName & " : " & docAnalysis.name & ": " & Err.Number & " " & Err.Description & " " & Err.Source
+ Resume FinalExit
+End Function
+
+Sub Analyze_VBEReferences(docAnalysis As DocumentAnalysis, currDoc As Object)
+ On Error GoTo HandleErrors
+ Dim currentFunctionName As String
+ currentFunctionName = "Analyze_VBEReferences"
+ 'References
+ Dim Ref As Reference
+ Dim fso As Scripting.FileSystemObject
+ Dim myVBProject As VBProject
+ Dim myVBComponent As VBComponent
+
+ Set fso = New Scripting.FileSystemObject
+
+ If CheckOnlyEmptyProject(docAnalysis, currDoc) Then
+ Exit Sub
+ End If
+ Set myVBProject = getAppSpecificVBProject(currDoc)
+
+ For Each Ref In myVBProject.References
+ Analyze_VBEReferenceSingle docAnalysis, Ref, fso
+ Next Ref
+
+FinalExit:
+ Set myVBProject = Nothing
+ Set fso = Nothing
+ Exit Sub
+
+HandleErrors:
+ WriteDebug currentFunctionName & " : " & docAnalysis.name & ": " & Err.Number & " " & Err.Description & " " & Err.Source
+ Resume FinalExit
+End Sub
+
+Sub Analyze_VBEReferenceSingle(docAnalysis As DocumentAnalysis, Ref As Reference, fso As Scripting.FileSystemObject)
+ On Error GoTo HandleErrors
+ Dim currentFunctionName As String
+ currentFunctionName = "Analyze_VBEReferenceSingle"
+ 'References
+ Dim myIssue As IssueInfo
+ Dim bBadRef As Boolean
+
+ Set myIssue = New IssueInfo
+ With myIssue
+ .IssueID = CID_INFORMATION_REFS
+ .IssueType = RID_STR_COMMON_ISSUE_INFORMATION
+ .SubType = RID_STR_COMMON_SUBISSUE_REFERENCES
+ .Location = .CLocationDocument
+
+ .IssueTypeXML = CSTR_ISSUE_INFORMATION
+ .SubTypeXML = CSTR_SUBISSUE_REFERENCES
+ .locationXML = .CXMLLocationDocument
+
+ If Ref.GUID = "" Then
+ bBadRef = True
+ Else
+ bBadRef = False
+ End If
+ If Not bBadRef Then
+ .SubLocation = LCase(fso.GetFileName(Ref.FullPath))
+ .Attributes.Add RID_STR_COMMON_ATTRIBUTE_NAME
+ .Values.Add Ref.name, RID_STR_COMMON_ATTRIBUTE_NAME
+ .Attributes.Add RID_STR_COMMON_ATTRIBUTE_DESCRIPTION
+ .Values.Add Ref.Description, RID_STR_COMMON_ATTRIBUTE_DESCRIPTION
+ .Attributes.Add RID_STR_COMMON_ATTRIBUTE_FILE
+ .Values.Add LCase(fso.GetFileName(Ref.FullPath)), RID_STR_COMMON_ATTRIBUTE_FILE
+ .Attributes.Add RID_STR_COMMON_ATTRIBUTE_PATH
+ .Values.Add LCase(Ref.FullPath), RID_STR_COMMON_ATTRIBUTE_PATH
+ Else
+ .SubLocation = RID_STR_COMMON_NA
+ .Attributes.Add RID_STR_COMMON_ATTRIBUTE_NAME
+ .Values.Add RID_STR_COMMON_ATTRIBUTE_MISSING, RID_STR_COMMON_ATTRIBUTE_NAME
+ .Attributes.Add RID_STR_COMMON_ATTRIBUTE_DESCRIPTION
+ .Values.Add RID_STR_COMMON_ATTRIBUTE_CHECK_DOCUMENT_REFERENCES, RID_STR_COMMON_ATTRIBUTE_DESCRIPTION
+ End If
+
+ .Attributes.Add RID_STR_COMMON_ATTRIBUTE_MAJOR
+ .Values.Add IIf(Not bBadRef, Ref.Major, ""), RID_STR_COMMON_ATTRIBUTE_MAJOR
+ .Attributes.Add RID_STR_COMMON_ATTRIBUTE_MINOR
+ .Values.Add IIf(Not bBadRef, Ref.Minor, ""), RID_STR_COMMON_ATTRIBUTE_MINOR
+
+ .Attributes.Add RID_STR_COMMON_ATTRIBUTE_TYPE
+ .Values.Add IIf(Ref.Type = vbext_rk_Project, RID_STR_COMMON_ATTRIBUTE_PROJECT, RID_STR_COMMON_ATTRIBUTE_TYPELIB), RID_STR_COMMON_ATTRIBUTE_TYPE
+
+ .Attributes.Add RID_STR_COMMON_ATTRIBUTE_BUILTIN
+ .Values.Add IIf(Ref.BuiltIn, RID_STR_COMMON_ATTRIBUTE_BUILTIN, RID_STR_COMMON_ATTRIBUTE_CUSTOM), RID_STR_COMMON_ATTRIBUTE_BUILTIN
+ .Attributes.Add RID_STR_COMMON_ATTRIBUTE_ISBROKEN
+ .Values.Add IIf(bBadRef, RID_STR_COMMON_ATTRIBUTE_BROKEN, RID_STR_COMMON_ATTRIBUTE_INTACT), RID_STR_COMMON_ATTRIBUTE_ISBROKEN
+ .Attributes.Add RID_STR_COMMON_ATTRIBUTE_GUID
+ .Values.Add IIf(Ref.Type = vbext_rk_TypeLib, Ref.GUID, ""), RID_STR_COMMON_ATTRIBUTE_GUID
+ End With
+
+ docAnalysis.References.Add myIssue
+
+FinalExit:
+ Set myIssue = Nothing
+ Exit Sub
+
+HandleErrors:
+ WriteDebugLevelTwo currentFunctionName & " : " & docAnalysis.name & ": " & Err.Number & " " & Err.Description & " " & Err.Source
+ Resume FinalExit
+End Sub
+
+Sub Analyze_MacrosForPortabilityIssues(docAnalysis As DocumentAnalysis, myProject As VBProject, myComponent As VBComponent)
+ On Error GoTo HandleErrors
+ Dim currentFunctionName As String
+ currentFunctionName = "Analyze_MacrosForPortabilityIssues"
+ Dim myIssue As IssueInfo
+ Dim count As Long
+
+ ' Code Modules
+ Dim strFind As String
+ strFind = VBFindLines(docAnalysis, myComponent.CodeModule, "CreateObject", count, bWholeWord:=True) & _
+ VBFindLines(docAnalysis, myComponent.CodeModule, "GetObject", count, bWholeWord:=True) & _
+ VBFindLines(docAnalysis, myComponent.CodeModule, "ADODB.", count, True, True) & _
+ VBFindLines(docAnalysis, myComponent.CodeModule, "Word.", count, True, True) & _
+ VBFindLines(docAnalysis, myComponent.CodeModule, "Excel.", count, True, True) & _
+ VBFindLines(docAnalysis, myComponent.CodeModule, "PowerPoint.", count, True, True) & _
+ VBFindLines(docAnalysis, myComponent.CodeModule, "Access.", count, True, True) & _
+ VBFindLines(docAnalysis, myComponent.CodeModule, "Declare Function ", count, False) & _
+ VBFindLines(docAnalysis, myComponent.CodeModule, "Declare Sub ", count, False)
+
+
+ If (strFind <> "") And (myComponent.Type <> vbext_ct_Document) Then
+ Set myIssue = New IssueInfo
+ With myIssue
+ .IssueID = CID_PORTABILITY
+ .IssueType = RID_STR_COMMON_ISSUE_PORTABILITY
+ .SubType = RID_STR_COMMON_SUBISSUE_EXTERNAL_REFERENCES_IN_MACROS
+ .Location = .CLocationDocument
+
+ .IssueTypeXML = CSTR_ISSUE_PORTABILITY
+ .SubTypeXML = CSTR_SUBISSUE_EXTERNAL_REFERENCES_IN_MACRO
+ .locationXML = .CXMLLocationDocument
+
+ .SubLocation = VBComponentType(myComponent)
+
+ .Attributes.Add RID_STR_COMMON_ATTRIBUTE_PROJECT
+ .Values.Add myProject.name
+ .Attributes.Add RID_STR_COMMON_ATTRIBUTE_COMPONENT
+ .Values.Add myComponent.name
+ .Attributes.Add RID_STR_COMMON_ATTRIBUTE_NON_PORTABLE_EXTERNAL_REFERENCES
+ .Values.Add RID_STR_COMMON_ATTRIBUTE_INCLUDING & vbLf & Left(strFind, Len(strFind) - 1)
+ .Attributes.Add RID_STR_COMMON_ATTRIBUTE_NON_PORTABLE_EXTERNAL_REFERENCES_COUNT
+ .Values.Add count, RID_STR_COMMON_ATTRIBUTE_NON_PORTABLE_EXTERNAL_REFERENCES_COUNT
+ End With
+ docAnalysis.IssuesCountArray(CID_PORTABILITY) = _
+ docAnalysis.IssuesCountArray(CID_PORTABILITY) + 1
+ docAnalysis.Issues.Add myIssue
+ docAnalysis.MacroNumExternalRefs = count + docAnalysis.MacroNumExternalRefs
+ docAnalysis.MacroIssuesCount = docAnalysis.MacroIssuesCount + 1
+ End If
+
+FinalExit:
+ Set myIssue = Nothing
+ Exit Sub
+
+
+HandleErrors:
+ WriteDebug currentFunctionName & " : " & docAnalysis.name & ": " & Err.Number & " " & Err.Description & " " & Err.Source
+Resume FinalExit
+End Sub
+
+'Find Lines in code module containing strFind and return list of them
+Function VBFindLines(docAnalysis As DocumentAnalysis, vbcm As CodeModule, strFind As String, _
+ count As Long, _
+ Optional bInProcedure As Boolean = True, _
+ Optional bUsingNew As Boolean = False, _
+ Optional bWholeWord As Boolean = False, _
+ Optional bMatchCase As Boolean = False) As String
+ On Error GoTo HandleErrors
+ Dim currentFunctionName As String
+ currentFunctionName = "VBFindLines"
+ Dim lngStartLine As Long
+ Dim lngStartCol As Long
+ Dim lngEndLine As Long
+ Dim lngEndCol As Long
+ Dim strLine As String
+ lngStartLine = 1
+ lngStartCol = 1
+ lngEndLine = vbcm.CountOfLines
+ Dim tmpString As String
+ If (vbcm.CountOfLines = 0) Then
+ Exit Function
+ End If
+ tmpString = vbcm.Lines(vbcm.CountOfLines, 1)
+ lngEndCol = Len(vbcm.Lines(vbcm.CountOfLines, 1))
+ Dim lngType As Long
+ Dim strProc As String
+ Dim retStr As String
+
+ ' Search
+ Do While vbcm.Find(strFind, lngStartLine, _
+ lngStartCol, lngEndLine, lngEndCol, bWholeWord, bMatchCase)
+
+ 'Ignore any lines using this func
+ If InStr(1, vbcm.Lines(lngStartLine, 1), "VBFindLines") <> 0 Then
+ GoTo CONTINUE_LOOP
+ End If
+
+ If bInProcedure Then
+ If bUsingNew Then
+ If InStr(1, vbcm.Lines(lngStartLine, 1), "New") <> 0 Then
+ strProc = vbcm.ProcOfLine(lngStartLine, lngType)
+ Else
+ strProc = ""
+ End If
+ Else
+ strProc = vbcm.ProcOfLine(lngStartLine, lngType)
+ End If
+ If strProc = "" Then GoTo CONTINUE_LOOP
+
+ VBFindLines = VBFindLines & "[" & strProc & " ( ) - " & lngStartLine & " ]" & _
+ vbLf & vbcm.Lines(lngStartLine, 1) & vbLf
+ Else
+ strProc = vbcm.Lines(lngStartLine, 1)
+ If strProc = "" Then GoTo CONTINUE_LOOP
+
+ 'Can be External refs, Const, Type or variable declarations
+ If InStr(1, vbcm.Lines(lngStartLine, 1), "Declare Function") <> 0 Then
+ VBFindLines = VBFindLines & "[" & RID_STR_COMMON_DEC_TO_EXTERNAL_LIBRARY & " - " & lngStartLine & " ]" & _
+ vbLf & strProc & vbLf
+ Else
+ VBFindLines = VBFindLines & "[" & RID_STR_COMMON_VB_COMPONENT_MODULE & " " & strFind & _
+ " - " & lngStartLine & " ]" & vbLf
+ End If
+ End If
+ count = count + 1
+
+CONTINUE_LOOP:
+ 'Reset Params to search for next hit
+ lngStartLine = lngEndLine + 1
+ lngStartCol = 1
+ lngEndLine = vbcm.CountOfLines
+ lngEndCol = Len(vbcm.Lines(vbcm.CountOfLines, 1))
+
+ If lngStartLine >= lngEndLine Then Exit Function
+
+ Loop 'End - Do While vbcm.Find
+ VBFindLines = VBFindLines
+ Exit Function
+
+HandleErrors:
+ WriteDebug currentFunctionName & " : " & docAnalysis.name & ": " & Err.Number & " " & Err.Description & " " & Err.Source
+End Function
+Function VBNumLines(docAnalysis As DocumentAnalysis, vbcm As CodeModule) As Long
+ On Error GoTo HandleErrors
+ Dim currentFunctionName As String
+ currentFunctionName = "VBNumLines"
+ Dim cLines As Long
+ Dim lngType As Long
+ Dim strProc As String
+
+ 'Issue: Just give line count in module to be in sync with Macro Analysis and Migration Wizard
+ VBNumLines = vbcm.CountOfLines
+
+ 'For cLines = 1 To vbcm.CountOfLines
+ ' strProc = vbcm.ProcOfLine(cLines, lngType)
+ ' If strProc <> "" Then
+ ' VBNumLines = VBNumLines - _
+ ' (vbcm.ProcBodyLine(strProc, lngType) - vbcm.ProcStartLine(strProc, lngType))
+ ' cLines = cLines + vbcm.ProcCountLines(strProc, lngType) - 1
+ ' End If
+ 'Next
+ Exit Function
+
+HandleErrors:
+ WriteDebug currentFunctionName & " : " & docAnalysis.name & ": " & Err.Number & " " & Err.Description & " " & Err.Source
+End Function
+Function VBNumFuncs(docAnalysis As DocumentAnalysis, vbcm As CodeModule) As Long
+ On Error GoTo HandleErrors
+ Dim currentFunctionName As String
+ currentFunctionName = "VBNumFuncs"
+ Dim cLines As Long
+ Dim lngType As Long
+ Dim strProc As String
+
+ For cLines = 1 To vbcm.CountOfLines
+ strProc = vbcm.ProcOfLine(cLines, lngType)
+ If strProc <> "" Then
+ VBNumFuncs = VBNumFuncs + 1
+ cLines = cLines + vbcm.ProcCountLines(strProc, lngType) - 1
+ End If
+ Next
+ Exit Function
+HandleErrors:
+ WriteDebug currentFunctionName & " : " & docAnalysis.name & ": " & Err.Number & " " & Err.Description & " " & Err.Source
+End Function
+
+Function VBComponentType(vbc As VBComponent) As String
+ Select Case vbc.Type
+ Case vbext_ct_StdModule
+ VBComponentType = RID_STR_COMMON_VB_COMPONENT_STANDARD
+ Case vbext_ct_ClassModule
+ VBComponentType = RID_STR_COMMON_VB_COMPONENT_CLASS
+ Case vbext_ct_MSForm
+ VBComponentType = RID_STR_COMMON_VB_COMPONENT_USER_FORM
+ Case vbext_ct_Document
+ VBComponentType = RID_STR_COMMON_VB_COMPONENT_DOCUMENT
+ Case 11 'vbext_ct_ActiveX Designer
+ VBComponentType = RID_STR_COMMON_VB_COMPONENT_ACTIVEX_DESIGNER
+ Case Else
+ VBComponentType = RID_STR_COMMON_UNKNOWN
+ End Select
+End Function
+
+Function CheckEmptyProject(docAnalysis As DocumentAnalysis, myProject As VBProject, myComponent As VBComponent) As Boolean
+ On Error GoTo HandleErrors
+ Dim currentFunctionName As String
+ currentFunctionName = "CheckEmptyProject"
+ Dim bEmptyProject As Boolean
+
+ 'Bug: Can have empty project with different name from default, would be picked up
+ ' as not empty.
+ 'bEmptyProject = _
+ ' (StrComp(myProject.name, CTOPLEVEL_PROJECT) = 0) And _
+ ' (VBNumFuncs(docAnalysis, myComponent.CodeModule) = 0) And _
+ ' (VBNumLines(docAnalysis, myComponent.CodeModule) < 3)
+
+ ' Code Modules
+ Dim strFind As String
+ Dim count As Long
+ 'Check for:
+ 'Public Const myFoo ....
+ 'Public Declare Function ....
+ 'Public myVar As ...
+ strFind = VBFindLines(docAnalysis, myComponent.CodeModule, "Public", _
+ count, bInProcedure:=False, bWholeWord:=True, bMatchCase:=True)
+
+ bEmptyProject = _
+ (VBNumFuncs(docAnalysis, myComponent.CodeModule) = 0) And _
+ (VBNumLines(docAnalysis, myComponent.CodeModule) < 3) And _
+ (strFind = "")
+
+ CheckEmptyProject = IIf(bEmptyProject, True, False)
+ Exit Function
+
+
+HandleErrors:
+ WriteDebug currentFunctionName & " : " & docAnalysis.name & ": " & Err.Number & " " & Err.Description & " " & Err.Source
+End Function
+
+Function getCustomDocPropTypeAsString(propType As MsoDocProperties)
+ Dim Str As String
+
+ Select Case propType
+ Case msoPropertyTypeBoolean
+ Str = RID_STR_COMMON_YES_OR_NO
+ Case msoPropertyTypeDate
+ Str = RID_STR_COMMON_DATE
+ Case msoPropertyTypeFloat
+ Str = RID_STR_COMMON_NUMBER
+ Case msoPropertyTypeNumber
+ Str = RID_STR_COMMON_NUMBER
+ Case msoPropertyTypeString
+ Str = RID_STR_COMMON_TEXT
+ Case Else
+ Str = "Unknown"
+ End Select
+
+ getCustomDocPropTypeAsString = Str
+End Function
+
+Sub HandleProtectedDocInvalidPassword(docAnalysis As DocumentAnalysis, strError As String, fso As FileSystemObject)
+ On Error GoTo HandleErrors
+ Dim currentFunctionName As String
+ currentFunctionName = "HandleProtectedDocInvalidPassword"
+ Dim f As File
+ Set f = fso.GetFile(docAnalysis.name)
+
+ docAnalysis.Application = RID_STR_COMMON_PASSWORD_SKIPDOC
+
+ On Error Resume Next
+ docAnalysis.PageCount = 0
+ docAnalysis.Created = f.DateCreated
+ docAnalysis.Modified = f.DateLastModified
+ docAnalysis.Accessed = f.DateLastAccessed
+ docAnalysis.Printed = DateValue("01/01/1900")
+ docAnalysis.SavedBy = RID_STR_COMMON_NA
+ docAnalysis.Revision = 0
+ docAnalysis.Template = RID_STR_COMMON_NA
+ On Error GoTo HandleErrors
+
+ Dim myIssue As IssueInfo
+ Set myIssue = New IssueInfo
+
+ With myIssue
+ .IssueID = CID_CONTENT_AND_DOCUMENT_PROPERTIES
+ .IssueType = RID_STR_COMMON_ISSUE_CONTENT_AND_DOCUMENT_PROPERTIES
+ .SubType = RID_STR_COMMON_SUBISSUE_INVALID_PASSWORD_ENTERED
+ .Location = .CLocationDocument
+
+ .IssueTypeXML = CSTR_ISSUE_CONTENT_DOCUMENT_PROPERTIES
+ .SubTypeXML = CSTR_SUBISSUE_INVALID_PASSWORD_ENTERED
+ .locationXML = .CXMLLocationDocument
+
+ .Attributes.Add RID_STR_COMMON_ATTRIBUTE_PASSWORD
+ .Values.Add strError
+
+ docAnalysis.IssuesCountArray(CID_CONTENT_AND_DOCUMENT_PROPERTIES) = _
+ docAnalysis.IssuesCountArray(CID_CONTENT_AND_DOCUMENT_PROPERTIES) + 1
+ End With
+
+ docAnalysis.Issues.Add myIssue
+
+FinalExit:
+ Set myIssue = Nothing
+ Set f = Nothing
+ Exit Sub
+
+HandleErrors:
+ WriteDebug currentFunctionName & " : " & docAnalysis.name & ": " & Err.Number & " " & Err.Description & " " & Err.Source
+ Resume FinalExit
+End Sub
+
+Sub Analyze_OLEEmbeddedSingleShape(docAnalysis As DocumentAnalysis, aShape As Shape, mySubLocation As Variant)
+
+ On Error GoTo HandleErrors
+ Dim currentFunctionName As String
+ currentFunctionName = "Analyze_OLEEmbeddedSingleShape"
+ Dim myIssue As IssueInfo
+ Dim bOleObject As Boolean
+ Dim TypeAsString As String
+ Dim XMLTypeAsString As String
+ Dim objName As String
+
+ bOleObject = (aShape.Type = msoEmbeddedOLEObject) Or _
+ (aShape.Type = msoLinkedOLEObject) Or _
+ (aShape.Type = msoOLEControlObject)
+
+ If Not bOleObject Then Exit Sub
+
+ aShape.Select
+ Select Case aShape.Type
+ Case msoEmbeddedOLEObject
+ TypeAsString = RID_STR_COMMON_OLE_EMBEDDED
+ XMLTypeAsString = CSTR_SUBISSUE_OLE_EMBEDDED
+ Case msoLinkedOLEObject
+ TypeAsString = RID_STR_COMMON_OLE_LINKED
+ XMLTypeAsString = CSTR_SUBISSUE_OLE_LINKED
+ Case msoOLEControlObject
+ TypeAsString = RID_STR_COMMON_OLE_CONTROL
+ XMLTypeAsString = CSTR_SUBISSUE_OLE_CONTROL
+ Case Else
+ TypeAsString = RID_STR_COMMON_OLE_UNKNOWN
+ XMLTypeAsString = CSTR_SUBISSUE_OLE_UNKNOWN
+ End Select
+
+ Dim appStr As String
+ appStr = getAppSpecificApplicationName
+
+ Set myIssue = New IssueInfo
+ With myIssue
+ .IssueID = CID_PORTABILITY
+ .IssueType = RID_STR_COMMON_ISSUE_PORTABILITY
+ .SubType = TypeAsString
+ .Location = .CLocationPage
+ .SubLocation = mySubLocation
+
+ .IssueTypeXML = CSTR_ISSUE_PORTABILITY
+ .SubTypeXML = XMLTypeAsString
+ .locationXML = .CXMLLocationPage
+
+ .Line = aShape.top
+ .column = aShape.Left
+
+ If aShape.name <> "" Then
+ .Attributes.Add RID_STR_COMMON_ATTRIBUTE_NAME
+ .Values.Add aShape.name
+ End If
+
+ If aShape.Type = msoEmbeddedOLEObject Or _
+ aShape.Type = msoOLEControlObject Then
+ Dim objType As String
+ On Error Resume Next
+
+ objType = getAppSpecificOLEClassType(aShape)
+
+ If objType = "" Then GoTo FinalExit
+ .Attributes.Add RID_STR_COMMON_ATTRIBUTE_OBJECT_TYPE
+ .Values.Add objType
+
+ If aShape.Type = msoOLEControlObject Then
+ docAnalysis.MacroNumOLEControls = 1 + docAnalysis.MacroNumOLEControls
+ End If
+
+ If appStr = CAPPNAME_POWERPOINT Then
+ '#114127: Too many open windows
+ 'Checking for OLEFormat.Object is Nothing or IsEmpty still causes problem
+ If objType <> "Equation.3" Then
+ objName = aShape.OLEFormat.Object.name
+ If Err.Number = 0 Then
+ If aShape.name <> objName Then
+ .Attributes.Add RID_STR_COMMON_ATTRIBUTE_OBJECT_NAME
+ .Values.Add objName
+ End If
+ End If
+ End If
+ Else
+ If Not (aShape.OLEFormat.Object) Is Nothing Then
+ objName = aShape.OLEFormat.Object.name
+ If Err.Number = 0 Then
+ If aShape.name <> objName Then
+ .Attributes.Add RID_STR_COMMON_ATTRIBUTE_OBJECT_NAME
+ .Values.Add objName
+ End If
+ End If
+ End If
+ End If
+
+ On Error GoTo HandleErrors
+ End If
+
+ If aShape.Type = msoLinkedOLEObject Then
+ If appStr <> CAPPNAME_WORD Then
+ On Error Resume Next
+ Dim path As String
+ path = aShape.OLEFormat.Object.SourceFullName
+ If Err.Number = 0 Then
+ .Attributes.Add RID_STR_COMMON_ATTRIBUTE_SOURCE
+ .Values.Add path
+ End If
+ On Error GoTo HandleErrors
+ Else
+ .Attributes.Add RID_STR_COMMON_ATTRIBUTE_SOURCE
+ .Values.Add aShape.LinkFormat.SourceFullName
+ End If
+ End If
+
+ docAnalysis.IssuesCountArray(CID_PORTABILITY) = _
+ docAnalysis.IssuesCountArray(CID_PORTABILITY) + 1
+ End With
+ docAnalysis.Issues.Add myIssue
+
+FinalExit:
+ Set myIssue = Nothing
+ Exit Sub
+
+HandleErrors:
+ WriteDebugLevelTwo currentFunctionName & " : " & docAnalysis.name & ": " & Err.Number & " " & Err.Description & " " & Err.Source
+ Resume FinalExit
+End Sub
+
+Sub Analyze_Lines(docAnalysis As DocumentAnalysis, myShape As Shape, mySubLocation As Variant)
+ On Error GoTo HandleErrors
+ Dim currentFunctionName As String
+ currentFunctionName = "Analyze_Lines"
+
+ If myShape.Line.Style = msoLineSingle Or _
+ myShape.Line.Style = msoLineStyleMixed Then Exit Sub
+
+ Dim myIssue As IssueInfo
+ Set myIssue = New IssueInfo
+
+ With myIssue
+ .IssueID = CID_CONTENT_AND_DOCUMENT_PROPERTIES
+ .IssueType = RID_STR_COMMON_ISSUE_CONTENT_AND_DOCUMENT_PROPERTIES
+ .SubType = RID_RESXLS_COST_LineStyle
+ .Location = .CLocationPage
+ .SubLocation = mySubLocation
+
+ .IssueTypeXML = CSTR_ISSUE_CONTENT_DOCUMENT_PROPERTIES
+ .SubTypeXML = CSTR_SUBISSUE_LINE
+ .locationXML = .CXMLLocationPage
+
+ .Line = myShape.top
+ .column = myShape.Left
+
+ If myShape.name <> "" Then
+ .Attributes.Add RID_STR_COMMON_ATTRIBUTE_NAME
+ .Values.Add myShape.name
+ End If
+
+ AddIssueDetailsNote myIssue, 0, RID_STR_COMMON_SUBISSUE_LINE_NOTE
+
+ docAnalysis.IssuesCountArray(CID_CONTENT_AND_DOCUMENT_PROPERTIES) = _
+ docAnalysis.IssuesCountArray(CID_CONTENT_AND_DOCUMENT_PROPERTIES) + 1
+ End With
+
+ docAnalysis.Issues.Add myIssue
+
+FinalExit:
+ Set myIssue = Nothing
+ Exit Sub
+
+HandleErrors:
+ WriteDebug currentFunctionName & " : " & docAnalysis.name & ": " & Err.Number & " " & Err.Description & " " & Err.Source
+ Resume FinalExit
+End Sub
+
+Sub Analyze_Transparency(docAnalysis As DocumentAnalysis, myShape As Shape, mySubLocation As Variant)
+ On Error GoTo HandleErrors
+ Dim currentFunctionName As String
+ currentFunctionName = "Analyze_Transparency"
+
+ If Not myShape.Type = msoPicture Then Exit Sub
+
+ Dim bHasTransparentBkg
+ bHasTransparentBkg = False
+
+ On Error Resume Next
+ If myShape.PictureFormat.TransparentBackground = msoTrue Then
+ If Error.Number = 0 Then
+ bHasTransparentBkg = True
+ End If
+ End If
+
+ On Error GoTo HandleErrors
+ If Not bHasTransparentBkg Then Exit Sub
+
+ Dim myIssue As IssueInfo
+ Set myIssue = New IssueInfo
+
+ With myIssue
+ .IssueID = CID_CONTENT_AND_DOCUMENT_PROPERTIES
+ .IssueType = RID_STR_COMMON_ISSUE_CONTENT_AND_DOCUMENT_PROPERTIES
+ .SubType = RID_RESXLS_COST_Transparent
+ .Location = .CLocationSlide
+ .SubLocation = mySubLocation
+
+ .IssueTypeXML = CSTR_ISSUE_CONTENT_DOCUMENT_PROPERTIES
+ .SubTypeXML = CSTR_SUBISSUE_TRANSPARENCY
+ .locationXML = .CXMLLocationPage
+
+ .Line = myShape.top
+ .column = myShape.Left
+
+ If myShape.name <> "" Then
+ .Attributes.Add RID_STR_COMMON_ATTRIBUTE_NAME
+ .Values.Add myShape.name
+ End If
+
+ AddIssueDetailsNote myIssue, 0, RID_STR_COMMON_SUBISSUE_TRANSPARENCY_NOTE
+
+ docAnalysis.IssuesCountArray(CID_CONTENT_AND_DOCUMENT_PROPERTIES) = _
+ docAnalysis.IssuesCountArray(CID_CONTENT_AND_DOCUMENT_PROPERTIES) + 1
+ End With
+
+ docAnalysis.Issues.Add myIssue
+
+FinalExit:
+ Set myIssue = Nothing
+ Exit Sub
+
+HandleErrors:
+ WriteDebug currentFunctionName & " : " & docAnalysis.name & ": " & Err.Number & " " & Err.Description & " " & Err.Source
+ Resume FinalExit
+End Sub
+
+Sub Analyze_Gradients(docAnalysis As DocumentAnalysis, myShape As Shape, mySubLocation As Variant)
+ On Error GoTo HandleErrors
+ Dim currentFunctionName As String
+ currentFunctionName = "Analyze_Gradients"
+
+ If myShape.Fill.Type <> msoFillGradient Then Exit Sub
+
+ Dim bUsesPresetGradient, bUsesFromCorner, bUsesFromCenter
+ bUsesPresetGradient = False
+ bUsesFromCorner = False
+ bUsesFromCenter = False
+
+ On Error Resume Next
+ If myShape.Fill.PresetGradientType <> msoPresetGradientMixed Then
+ If Error.Number = 0 Then
+ bUsesPresetGradient = True
+ End If
+ End If
+ If myShape.Fill.GradientStyle <> msoGradientFromCorner Then
+ If Error.Number = 0 Then
+ bUsesFromCorner = True
+ End If
+ End If
+ If myShape.Fill.GradientStyle <> msoGradientFromCenter Then
+ If Error.Number = 0 Then
+ bUsesFromCenter = True
+ End If
+ End If
+
+ On Error GoTo HandleErrors
+ If Not bUsesPresetGradient And Not bUsesFromCorner _
+ And Not bUsesFromCenter Then Exit Sub
+
+ Dim myIssue As IssueInfo
+ Set myIssue = New IssueInfo
+
+ With myIssue
+ .IssueID = CID_CONTENT_AND_DOCUMENT_PROPERTIES
+ .IssueType = RID_STR_COMMON_ISSUE_CONTENT_AND_DOCUMENT_PROPERTIES
+ .SubType = RID_RESXLS_COST_GradientStyle
+ .Location = .CLocationSlide
+ .SubLocation = mySubLocation
+
+ .IssueTypeXML = CSTR_ISSUE_CONTENT_DOCUMENT_PROPERTIES
+ .SubTypeXML = CSTR_SUBISSUE_GRADIENT
+ .locationXML = .CXMLLocationSlide
+
+ .Line = myShape.top
+ .column = myShape.Left
+
+ If myShape.name <> "" Then
+ .Attributes.Add RID_STR_COMMON_ATTRIBUTE_NAME
+ .Values.Add myShape.name
+ End If
+
+ If bUsesPresetGradient Then
+ AddIssueDetailsNote myIssue, 0, RID_STR_COMMON_SUBISSUE_GRADIENT_PRESET_NOTE
+ ElseIf bUsesFromCorner Then
+ AddIssueDetailsNote myIssue, 0, RID_STR_COMMON_SUBISSUE_GRADIENT_CORNER_NOTE
+ Else
+ AddIssueDetailsNote myIssue, 0, RID_STR_COMMON_SUBISSUE_GRADIENT_CENTER_NOTE
+ End If
+
+ docAnalysis.IssuesCountArray(CID_CONTENT_AND_DOCUMENT_PROPERTIES) = _
+ docAnalysis.IssuesCountArray(CID_CONTENT_AND_DOCUMENT_PROPERTIES) + 1
+ End With
+
+ docAnalysis.Issues.Add myIssue
+
+FinalExit:
+ Set myIssue = Nothing
+ Exit Sub
+
+HandleErrors:
+ WriteDebug currentFunctionName & " : " & docAnalysis.name & ": " & Err.Number & " " & Err.Description & " " & Err.Source
+ Resume FinalExit
+End Sub
+
+Private Function CreateFullPath(newPath As String, fso As FileSystemObject)
+ 'We don't want to create 'c:\'
+ If (Len(newPath) < 4) Then
+ Exit Function
+ End If
+
+ 'Create parent folder first
+ If (Not fso.FolderExists(fso.GetParentFolderName(newPath))) Then
+ CreateFullPath fso.GetParentFolderName(newPath), fso
+ End If
+
+ If (Not fso.FolderExists(newPath)) Then
+ fso.CreateFolder (newPath)
+ End If
+End Function
+
+Function GetPreparedFullPath(sourceDocPath As String, startDir As String, storeToDir As String, _
+ fso As FileSystemObject) As String
+ On Error GoTo HandleErrors
+ Dim currentFunctionName As String
+ currentFunctionName = "GetPreparedFullPath"
+ GetPreparedFullPath = ""
+
+ Dim preparedPath As String
+
+ preparedPath = Right(sourceDocPath, Len(sourceDocPath) - Len(startDir))
+ If Left(preparedPath, 1) = "\" Then
+ preparedPath = Right(preparedPath, Len(preparedPath) - 1)
+ End If
+
+ 'Allow for root folder C:\
+ If Right(storeToDir, 1) <> "\" Then
+ preparedPath = storeToDir & "\" & CSTR_COMMON_PREPARATION_FOLDER & "\" & preparedPath
+ Else
+ preparedPath = storeToDir & CSTR_COMMON_PREPARATION_FOLDER & "\" & preparedPath
+ End If
+
+ 'Debug: MsgBox "Preppath: " & preparedPath
+ CreateFullPath fso.GetParentFolderName(preparedPath), fso
+
+ 'Only set if folder to save to exists or has been created, otherwise return ""
+ GetPreparedFullPath = preparedPath
+
+FinalExit:
+ Exit Function
+
+HandleErrors:
+ WriteDebugLevelTwo currentFunctionName & " : " & sourceDocPath & ": " & Err.Number & " " & Err.Description & " " & Err.Source
+ Resume FinalExit
+End Function
+
+Function ClassifyDocOverallMacroClass(docAnalysis As DocumentAnalysis) As EnumDocOverallMacroClass
+ ClassifyDocOverallMacroClass = enMacroNone
+
+ If Not docAnalysis.HasMacros Then Exit Function
+
+ If (docAnalysis.MacroTotalNumLines >= CMACRO_LINECOUNT_MEDIUM_LBOUND) Then
+ If (docAnalysis.MacroNumExternalRefs > 0) Or _
+ (docAnalysis.MacroNumOLEControls > 0 Or docAnalysis.MacroNumFieldsUsingMacros > 0) Or _
+ docAnalysis.MacroNumUserForms > 0 Then
+ ClassifyDocOverallMacroClass = enMacroComplex
+ Else
+ ClassifyDocOverallMacroClass = enMacroMedium
+ End If
+ Else
+ ClassifyDocOverallMacroClass = enMacroSimple
+ End If
+
+End Function
+
diff --git a/migrationanalysis/src/driver_docs/sources/CommonPreparation.bas b/migrationanalysis/src/driver_docs/sources/CommonPreparation.bas
new file mode 100644
index 000000000000..2d0e04f80e4a
--- /dev/null
+++ b/migrationanalysis/src/driver_docs/sources/CommonPreparation.bas
@@ -0,0 +1,228 @@
+Attribute VB_Name = "CommonPreparation"
+'/*************************************************************************
+' *
+' * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+' *
+' * Copyright 2008 by Sun Microsystems, Inc.
+' *
+' * OpenOffice.org - a multi-platform office productivity suite
+' *
+' * $RCSfile: CommonPreparation.bas,v $
+' *
+' * This file is part of OpenOffice.org.
+' *
+' * OpenOffice.org is free software: you can redistribute it and/or modify
+' * it under the terms of the GNU Lesser General Public License version 3
+' * only, as published by the Free Software Foundation.
+' *
+' * OpenOffice.org is distributed in the hope that it will be useful,
+' * but WITHOUT ANY WARRANTY; without even the implied warranty of
+' * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+' * GNU Lesser General Public License version 3 for more details
+' * (a copy is included in the LICENSE file that accompanied this code).
+' *
+' * You should have received a copy of the GNU Lesser General Public License
+' * version 3 along with OpenOffice.org. If not, see
+' * <http://www.openoffice.org/license.html>
+' * for a copy of the LGPLv3 License.
+' *
+' ************************************************************************/
+
+Option Explicit
+Private Declare Function CryptAcquireContext Lib "advapi32.dll" _
+ Alias "CryptAcquireContextA" (ByRef phProv As Long, _
+ ByVal pszContainer As String, ByVal pszProvider As String, _
+ ByVal dwProvType As Long, ByVal dwFlags As Long) As Long
+
+Private Declare Function CryptReleaseContext Lib "advapi32.dll" ( _
+ ByVal hProv As Long, ByVal dwFlags As Long) As Long
+
+Private Declare Function CryptCreateHash Lib "advapi32.dll" ( _
+ ByVal hProv As Long, ByVal Algid As Long, ByVal hKey As Long, _
+ ByVal dwFlags As Long, ByRef phHash As Long) As Long
+
+Private Declare Function CryptDestroyHash Lib "advapi32.dll" (ByVal hHash As Long) As Long
+
+Private Declare Function CryptHashData Lib "advapi32.dll" (ByVal hHash As Long, _
+ pbData As Any, ByVal dwDataLen As Long, ByVal dwFlags As Long) As Long
+
+Private Declare Function CryptGetHashParam Lib "advapi32.dll" ( _
+ ByVal hHash As Long, ByVal dwParam As Long, pbData As Any, _
+ pdwDataLen As Long, ByVal dwFlags As Long) As Long
+
+Private Const ALG_CLASS_ANY As Long = 0
+Private Const ALG_TYPE_ANY As Long = 0
+Private Const ALG_CLASS_HASH As Long = 32768
+Private Const ALG_SID_MD5 As Long = 3
+' Hash algorithms
+Private Const MD5_ALGORITHM As Long = ALG_CLASS_HASH Or ALG_TYPE_ANY Or ALG_SID_MD5
+' CryptSetProvParam
+Private Const PROV_RSA_FULL As Long = 1
+' used when acquiring the provider
+Private Const CRYPT_VERIFYCONTEXT As Long = &HF0000000
+' Microsoft provider data
+Private Const MS_DEFAULT_PROVIDER As String = _
+ "Microsoft Base Cryptographic Provider v1.0"
+
+Function DoPreparation(docAnalysis As DocumentAnalysis, myIssue As IssueInfo, preparationNote As String, _
+ var As Variant, currDoc As Object) As Boolean
+ On Error GoTo HandleErrors
+ Dim currentFunctionName As String
+ currentFunctionName = "DoPreparation"
+
+ DoPreparation = False
+
+ 'Log as Preparable
+ AddIssueDetailsNote myIssue, 0, preparationNote, RID_STR_COMMON_PREPARATION_NOTE
+ myIssue.Preparable = True
+ docAnalysis.PreparableIssuesCount = docAnalysis.PreparableIssuesCount + 1
+
+ If Not CheckDoPrepare Then Exit Function
+
+ 'Do Prepare
+
+ If myIssue.IssueTypeXML = CSTR_ISSUE_OBJECTS_GRAPHICS_AND_FRAMES And _
+ myIssue.SubTypeXML = CSTR_SUBISSUE_OBJECT_IN_HEADER_FOOTER Then
+ DoPreparation = Prepare_HeaderFooter_GraphicFrames(docAnalysis, myIssue, var, currDoc)
+
+ ElseIf myIssue.IssueTypeXML = CSTR_ISSUE_CONTENT_DOCUMENT_PROPERTIES And _
+ myIssue.SubTypeXML = CSTR_SUBISSUE_OLD_WORKBOOK_VERSION Then
+ DoPreparation = Prepare_WorkbookVersion()
+
+ End If
+
+FinalExit:
+ Exit Function
+
+HandleErrors:
+ WriteDebug currentFunctionName & _
+ " : path " & docAnalysis.name & ": " & _
+ " : myIssue " & myIssue.IssueTypeXML & "_" & myIssue.SubTypeXML & ": " & _
+ Err.Number & " " & Err.Description & " " & Err.Source
+ Resume FinalExit
+End Function
+
+Function InDocPreparation() As Boolean
+ InDocPreparation = True
+End Function
+
+Function Prepare_DocumentCustomProperties(docAnalysis As DocumentAnalysis, myIssue As IssueInfo, _
+ var As Variant, currDoc As Object) As Boolean
+ On Error GoTo HandleErrors
+ Dim currentFunctionName As String
+ currentFunctionName = "Prepare_DocumentCustomProperties"
+
+ Dim aProp As DocumentProperty
+ Dim myCustomDocumentProperties As DocumentProperties
+ Dim commentProp As DocumentProperty
+ Prepare_DocumentCustomProperties = False
+
+ Set myCustomDocumentProperties = getAppSpecificCustomDocProperties(currDoc)
+ Set commentProp = getAppSpecificCommentBuiltInDocProperty(currDoc)
+ Set aProp = var 'Safe as we know that a DocumentProperty is being passed in
+
+ If commentProp.value <> "" Then commentProp.value = commentProp.value & vbLf
+
+ commentProp.value = commentProp.value & _
+ RID_STR_COMMON_SUBISSUE_DOCUMENT_CUSTOM_PROPERTY & ": " & vbLf
+
+ commentProp.value = commentProp.value & _
+ RID_STR_COMMON_ATTRIBUTE_NAME & " - " & aProp.name & ", " & _
+ RID_STR_COMMON_ATTRIBUTE_TYPE & " - " & getCustomDocPropTypeAsString(aProp.Type) & ", " & _
+ RID_STR_COMMON_ATTRIBUTE_VALUE & " - " & aProp.value
+
+ myCustomDocumentProperties.item(aProp.name).Delete
+
+ Prepare_DocumentCustomProperties = True
+
+FinalExit:
+ Exit Function
+
+HandleErrors:
+ WriteDebug currentFunctionName & " : " & docAnalysis.name & ": " & Err.Number & " " & Err.Description & " " & Err.Source
+ Resume FinalExit
+End Function
+
+Private Function GetProvider(hCtx As Long) As Boolean
+ Const NTE_BAD_KEYSET = &H80090016
+ Const NTE_EXISTS = &H8009000F
+ Const NTE_KEYSET_NOT_DEF = &H80090019
+ Dim currentFunctionName As String
+ currentFunctionName = "GetProvider"
+
+ Dim strTemp As String
+ Dim strProvider As String
+ Dim strErrorMsg As String
+ Dim errStr As String
+
+ GetProvider = False
+
+ On Error Resume Next
+ strTemp = vbNullChar
+ strProvider = MS_DEFAULT_PROVIDER & vbNullChar
+ If CBool(CryptAcquireContext(hCtx, ByVal strTemp, _
+ ByVal strProvider, PROV_RSA_FULL, CRYPT_VERIFYCONTEXT)) Then
+ GetProvider = True
+ Exit Function
+ End If
+
+ Select Case Err.LastDllError
+ Case NTE_BAD_KEYSET
+ errStr = "Key container does not exist or You do not have access to the key container."
+ Case NTE_EXISTS
+ errStr = "The key container already exists, but you are attempting to create it"
+ Case NTE_KEYSET_NOT_DEF
+ errStr = "The Crypto Service Provider (CSP) may not be set up correctly"
+ End Select
+ WriteDebug currentFunctionName & "Problems acquiring Crypto Provider: " & MS_DEFAULT_PROVIDER & ": " & errStr
+End Function
+
+
+
+Function MD5HashString(ByVal Str As String) As String
+ Const HP_HASHVAL = 2
+ Const HP_HASHSIZE = 4
+ On Error GoTo HandleErrors
+ Dim currentFunctionName As String
+ currentFunctionName = "MD5HashString"
+
+ Dim hCtx As Long
+ Dim hHash As Long
+ Dim ret As Long
+ Dim lLen As Long
+ Dim lIdx As Long
+ Dim abData() As Byte
+
+ If Not GetProvider(hCtx) Then Err.Raise Err.LastDllError
+
+ ret = CryptCreateHash(hCtx, MD5_ALGORITHM, 0, 0, hHash)
+ If ret = 0 Then Err.Raise Err.LastDllError
+
+ ret = CryptHashData(hHash, ByVal Str, Len(Str), 0)
+ If ret = 0 Then Err.Raise Err.LastDllError
+
+ ret = CryptGetHashParam(hHash, HP_HASHSIZE, lLen, 4, 0)
+ If ret = 0 Then Err.Raise Err.LastDllError
+
+
+ ReDim abData(0 To lLen - 1)
+ ret = CryptGetHashParam(hHash, HP_HASHVAL, abData(0), lLen, 0)
+ If ret = 0 Then Err.Raise Err.LastDllError
+
+ For lIdx = 0 To UBound(abData)
+ MD5HashString = MD5HashString & Right$("0" & Hex$(abData(lIdx)), 2)
+ Next
+ CryptDestroyHash hHash
+
+ CryptReleaseContext hCtx, 0
+
+FinalExit:
+ Exit Function
+
+HandleErrors:
+ MD5HashString = ""
+ WriteDebug currentFunctionName & _
+ Err.Number & " " & Err.Description & " " & Err.Source
+ Resume FinalExit
+End Function
+
diff --git a/migrationanalysis/src/driver_docs/sources/DocumentAnalysis.cls b/migrationanalysis/src/driver_docs/sources/DocumentAnalysis.cls
new file mode 100644
index 000000000000..cc974e3a2c79
--- /dev/null
+++ b/migrationanalysis/src/driver_docs/sources/DocumentAnalysis.cls
@@ -0,0 +1,344 @@
+VERSION 1.0 CLASS
+BEGIN
+ MultiUse = -1 'True
+END
+Attribute VB_Name = "DocumentAnalysis"
+Attribute VB_GlobalNameSpace = False
+Attribute VB_Creatable = False
+Attribute VB_PredeclaredId = False
+Attribute VB_Exposed = False
+'/*************************************************************************
+' *
+' * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+' *
+' * Copyright 2008 by Sun Microsystems, Inc.
+' *
+' * OpenOffice.org - a multi-platform office productivity suite
+' *
+' * $RCSfile: DocumentAnalysis.cls,v $
+' *
+' * This file is part of OpenOffice.org.
+' *
+' * OpenOffice.org is free software: you can redistribute it and/or modify
+' * it under the terms of the GNU Lesser General Public License version 3
+' * only, as published by the Free Software Foundation.
+' *
+' * OpenOffice.org is distributed in the hope that it will be useful,
+' * but WITHOUT ANY WARRANTY; without even the implied warranty of
+' * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+' * GNU Lesser General Public License version 3 for more details
+' * (a copy is included in the LICENSE file that accompanied this code).
+' *
+' * You should have received a copy of the GNU Lesser General Public License
+' * version 3 along with OpenOffice.org. If not, see
+' * <http://www.openoffice.org/license.html>
+' * for a copy of the LGPLv3 License.
+' *
+' ************************************************************************/
+Option Explicit
+
+Const CMAX_NUM_ISSUETYPES = 100
+
+Private mName As String
+Private mApplication As String
+Private mPageCount As Long
+Private mCreated As Date
+Private mModified As Date
+Private mAccessed As Date
+Private mPrinted As Date
+Private mSavedBy As String
+Private mRevision As Long
+Private mTemplate As String
+Private mHasMacros As Boolean
+
+Private mDocIssuesCosts As Long
+Private mPreparableIssuesCosts As Long
+Private mMacroCosts As Long
+
+Private mReferences As Collection
+Private mIssues As Collection
+Private mIssuesCountArray(1 To CMAX_NUM_ISSUETYPES) As Long
+Private mTotalIssueTypes As Long
+Private mMinorIssuesCount As Long
+Private mMacroIssuesCount As Long
+Private mPreparableIssuesCount As Long
+
+Private mDocOverallIssueClass As EnumDocOverallIssueClass
+
+Private mMacroTotalNumLines As Long
+Private mMacroNumUserForms As Long
+Private mMacroNumUserFormControls As Long
+Private mMacroNumUserFormControlTypes As Long
+Private mMacroNumOLEControls As Long
+Private mMacroNumFieldsUsingMacros As Long
+Private mMacroNumExternalRefs As Long
+Private mMacroOverallClass As EnumDocOverallMacroClass
+Private mbBelowIssuesLimit As Boolean
+
+Public Property Get BelowIssuesLimit() As Boolean
+ BelowIssuesLimit = mbBelowIssuesLimit
+End Property
+Public Property Let BelowIssuesLimit(vNewValue As Boolean)
+ mbBelowIssuesLimit = vNewValue
+End Property
+
+Public Property Get MacroOverallClass() As EnumDocOverallMacroClass
+ MacroOverallClass = mMacroOverallClass
+End Property
+Public Property Let MacroOverallClass(vNewValue As EnumDocOverallMacroClass)
+ mMacroOverallClass = vNewValue
+End Property
+
+Public Property Get MacroNumExternalRefs() As Long
+ MacroNumExternalRefs = mMacroNumExternalRefs
+End Property
+Public Property Let MacroNumExternalRefs(vNewValue As Long)
+ mMacroNumExternalRefs = vNewValue
+End Property
+
+Public Property Get MacroNumFieldsUsingMacros() As Long
+ MacroNumFieldsUsingMacros = mMacroNumFieldsUsingMacros
+End Property
+Public Property Let MacroNumFieldsUsingMacros(vNewValue As Long)
+ mMacroNumFieldsUsingMacros = vNewValue
+End Property
+
+Public Property Get MacroNumOLEControls() As Long
+ MacroNumOLEControls = mMacroNumOLEControls
+End Property
+Public Property Let MacroNumOLEControls(vNewValue As Long)
+ mMacroNumOLEControls = vNewValue
+End Property
+
+Public Property Get MacroNumUserFormControlTypes() As Long
+ MacroNumUserFormControlTypes = mMacroNumUserFormControlTypes
+End Property
+Public Property Let MacroNumUserFormControlTypes(vNewValue As Long)
+ mMacroNumUserFormControlTypes = vNewValue
+End Property
+
+Public Property Get MacroNumUserFormControls() As Long
+ MacroNumUserFormControls = mMacroNumUserFormControls
+End Property
+Public Property Let MacroNumUserFormControls(vNewValue As Long)
+ mMacroNumUserFormControls = vNewValue
+End Property
+
+Public Property Get MacroNumUserForms() As Long
+ MacroNumUserForms = mMacroNumUserForms
+End Property
+Public Property Let MacroNumUserForms(vNewValue As Long)
+ mMacroNumUserForms = vNewValue
+End Property
+
+Public Property Get MacroTotalNumLines() As Long
+ MacroTotalNumLines = mMacroTotalNumLines
+End Property
+Public Property Let MacroTotalNumLines(vNewValue As Long)
+ mMacroTotalNumLines = vNewValue
+End Property
+
+Public Property Get MacroCosts() As Long
+ MacroCosts = mMacroCosts
+End Property
+Public Property Let MacroCosts(vNewValue As Long)
+ mMacroCosts = vNewValue
+End Property
+
+Public Property Get DocIssuesCosts() As Long
+ DocIssuesCosts = mDocIssuesCosts
+End Property
+Public Property Let DocIssuesCosts(vNewValue As Long)
+ mDocIssuesCosts = vNewValue
+End Property
+
+Public Property Get PreparableIssuesCosts() As Long
+ PreparableIssuesCosts = mPreparableIssuesCosts
+End Property
+Public Property Let PreparableIssuesCosts(vNewValue As Long)
+ mPreparableIssuesCosts = vNewValue
+End Property
+
+Public Property Get DocOverallIssueClass() As EnumDocOverallIssueClass
+ DocOverallIssueClass = mDocOverallIssueClass
+End Property
+
+Public Property Let DocOverallIssueClass(ByVal vNewValue As EnumDocOverallIssueClass)
+ mDocOverallIssueClass = vNewValue
+End Property
+
+Public Property Get TotalIssueTypes() As Long
+ TotalIssueTypes = mTotalIssueTypes
+End Property
+
+Public Property Let TotalIssueTypes(ByVal vNewValue As Long)
+ mTotalIssueTypes = vNewValue
+End Property
+Public Property Get name() As String
+ name = mName
+End Property
+
+Public Property Let name(ByVal vNewValue As String)
+ mName = vNewValue
+End Property
+
+Public Property Get Application() As String
+ Application = mApplication
+End Property
+
+Public Property Let Application(ByVal vNewValue As String)
+ mApplication = vNewValue
+End Property
+Public Property Get PageCount() As Long
+ PageCount = mPageCount
+End Property
+
+Public Property Let PageCount(ByVal vNewValue As Long)
+ mPageCount = vNewValue
+End Property
+
+Public Property Get Created() As Date
+ Created = mCreated
+End Property
+
+Public Property Let Created(ByVal vNewValue As Date)
+ mCreated = vNewValue
+End Property
+
+Public Property Get Modified() As Date
+ Modified = mModified
+End Property
+
+Public Property Let Modified(ByVal vNewValue As Date)
+ mModified = vNewValue
+End Property
+
+Public Property Get Accessed() As Date
+ Accessed = mAccessed
+End Property
+
+Public Property Let Accessed(ByVal vNewValue As Date)
+ mAccessed = vNewValue
+End Property
+Public Property Get Printed() As Date
+ Printed = mPrinted
+End Property
+
+Public Property Let Printed(ByVal vNewValue As Date)
+ mPrinted = vNewValue
+End Property
+
+Public Property Get SavedBy() As String
+ SavedBy = mSavedBy
+End Property
+
+Public Property Let SavedBy(ByVal vNewValue As String)
+ mSavedBy = vNewValue
+End Property
+
+Public Property Get Revision() As Long
+ Revision = mRevision
+End Property
+
+Public Property Let Revision(ByVal vNewValue As Long)
+ mRevision = vNewValue
+End Property
+
+Public Property Get Template() As String
+ Template = mTemplate
+End Property
+
+Public Property Let Template(ByVal vNewValue As String)
+ mTemplate = vNewValue
+End Property
+Public Property Get HasMacros() As Boolean
+ HasMacros = mHasMacros
+End Property
+
+Public Property Let HasMacros(ByVal vNewValue As Boolean)
+ mHasMacros = vNewValue
+End Property
+
+Public Property Get References() As Collection
+ Set References = mReferences
+End Property
+
+Public Property Let References(ByVal vNewValue As Collection)
+ Set mReferences = vNewValue
+End Property
+
+Public Property Get Issues() As Collection
+ Set Issues = mIssues
+End Property
+
+Public Property Let Issues(ByVal vNewValue As Collection)
+ Set mIssues = vNewValue
+End Property
+
+Public Property Get IssuesCountArray(ByVal index As Integer) As Long
+ If index >= LBound(mIssuesCountArray) And index <= UBound(mIssuesCountArray) Then
+ IssuesCountArray = mIssuesCountArray(index)
+ Else
+ IssuesCountArray = Null
+ End If
+End Property
+
+Public Property Let IssuesCountArray(ByVal index As Integer, ByVal vNewValue As Long)
+ If index >= LBound(mIssuesCountArray) And index <= UBound(mIssuesCountArray) Then
+ mIssuesCountArray(index) = vNewValue
+ End If
+End Property
+
+Public Property Get IssuesCount() As Long
+ IssuesCount = mIssues.count
+End Property
+
+Public Property Get ComplexIssuesCount() As Long
+ Dim complexCount As Long
+ complexCount = mIssues.count - mMinorIssuesCount - mMacroIssuesCount
+ ComplexIssuesCount = IIf(complexCount > 0, complexCount, 0)
+End Property
+
+Public Property Get MacroIssuesCount() As Long
+ MacroIssuesCount = mMacroIssuesCount
+End Property
+
+Public Property Let MacroIssuesCount(ByVal vNewValue As Long)
+ mMacroIssuesCount = vNewValue
+End Property
+
+Public Property Get MinorIssuesCount() As Long
+ MinorIssuesCount = mMinorIssuesCount
+End Property
+
+Public Property Let MinorIssuesCount(ByVal vNewValue As Long)
+ mMinorIssuesCount = vNewValue
+End Property
+
+Public Property Get PreparableIssuesCount() As Long
+ PreparableIssuesCount = mPreparableIssuesCount
+End Property
+
+Public Property Let PreparableIssuesCount(ByVal vNewValue As Long)
+ mPreparableIssuesCount = vNewValue
+End Property
+
+Private Sub Class_Initialize()
+ mApplication = ""
+ mTotalIssueTypes = 0
+ mHasMacros = False
+ Set mIssues = New Collection
+ Set mReferences = New Collection
+ mPreparableIssuesCount = 0
+ mMacroOverallClass = enNone
+ mDocOverallIssueClass = enNone
+ mDocIssuesCosts = 0
+ mPreparableIssuesCosts = 0
+ mMacroCosts = 0
+ mbBelowIssuesLimit = False
+End Sub
+Private Sub Class_Terminate()
+ Set mIssues = Nothing
+ Set mReferences = Nothing
+End Sub
+
diff --git a/migrationanalysis/src/driver_docs/sources/FileTypeAssociation.cls b/migrationanalysis/src/driver_docs/sources/FileTypeAssociation.cls
new file mode 100644
index 000000000000..6a578f43c01b
--- /dev/null
+++ b/migrationanalysis/src/driver_docs/sources/FileTypeAssociation.cls
@@ -0,0 +1,58 @@
+VERSION 1.0 CLASS
+BEGIN
+ MultiUse = -1 'True
+END
+Attribute VB_Name = "FileTypeAssociation"
+Attribute VB_GlobalNameSpace = False
+Attribute VB_Creatable = False
+Attribute VB_PredeclaredId = False
+Attribute VB_Exposed = False
+'/*************************************************************************
+' *
+' * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+' *
+' * Copyright 2008 by Sun Microsystems, Inc.
+' *
+' * OpenOffice.org - a multi-platform office productivity suite
+' *
+' * $RCSfile: FileTypeAssociation.cls,v $
+' *
+' * This file is part of OpenOffice.org.
+' *
+' * OpenOffice.org is free software: you can redistribute it and/or modify
+' * it under the terms of the GNU Lesser General Public License version 3
+' * only, as published by the Free Software Foundation.
+' *
+' * OpenOffice.org is distributed in the hope that it will be useful,
+' * but WITHOUT ANY WARRANTY; without even the implied warranty of
+' * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+' * GNU Lesser General Public License version 3 for more details
+' * (a copy is included in the LICENSE file that accompanied this code).
+' *
+' * You should have received a copy of the GNU Lesser General Public License
+' * version 3 along with OpenOffice.org. If not, see
+' * <http://www.openoffice.org/license.html>
+' * for a copy of the LGPLv3 License.
+' *
+' ************************************************************************/
+Option Explicit
+
+Private mFileSpec As String
+Private mXLKey As String
+
+
+Public Property Get filespec() As String
+ filespec = mFileSpec
+End Property
+
+Public Property Let filespec(ByVal vNewValue As String)
+ mFileSpec = vNewValue
+End Property
+
+Public Property Get key() As String
+ key = mXLKey
+End Property
+
+Public Property Let key(ByVal vNewValue As String)
+ mXLKey = vNewValue
+End Property
diff --git a/migrationanalysis/src/driver_docs/sources/IssueInfo.cls b/migrationanalysis/src/driver_docs/sources/IssueInfo.cls
new file mode 100644
index 000000000000..23c95c8fa7d0
--- /dev/null
+++ b/migrationanalysis/src/driver_docs/sources/IssueInfo.cls
@@ -0,0 +1,208 @@
+VERSION 1.0 CLASS
+BEGIN
+ MultiUse = -1 'True
+END
+Attribute VB_Name = "IssueInfo"
+Attribute VB_GlobalNameSpace = False
+Attribute VB_Creatable = False
+Attribute VB_PredeclaredId = False
+Attribute VB_Exposed = False
+'/*************************************************************************
+' *
+' * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+' *
+' * Copyright 2008 by Sun Microsystems, Inc.
+' *
+' * OpenOffice.org - a multi-platform office productivity suite
+' *
+' * $RCSfile: IssueInfo.cls,v $
+' *
+' * This file is part of OpenOffice.org.
+' *
+' * OpenOffice.org is free software: you can redistribute it and/or modify
+' * it under the terms of the GNU Lesser General Public License version 3
+' * only, as published by the Free Software Foundation.
+' *
+' * OpenOffice.org is distributed in the hope that it will be useful,
+' * but WITHOUT ANY WARRANTY; without even the implied warranty of
+' * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+' * GNU Lesser General Public License version 3 for more details
+' * (a copy is included in the LICENSE file that accompanied this code).
+' *
+' * You should have received a copy of the GNU Lesser General Public License
+' * version 3 along with OpenOffice.org. If not, see
+' * <http://www.openoffice.org/license.html>
+' * for a copy of the LGPLv3 License.
+' *
+' ************************************************************************/
+
+Option Explicit
+
+Private mIssueID As Integer
+Private mIssueType As String
+Private mSubType As String
+Private mIssueTypeXML As String
+Private mSubTypeXML As String
+Private mLocationXML As String
+Private mLocation As String
+Private mSubLocation As Variant
+Private mLine As Long
+Private mColumn As Variant
+Private mAttributes As Collection
+Private mValues As Collection
+Private mPreparable As Boolean
+
+'General Constants
+Public Property Get CLocationDocument() As String
+ CLocationDocument = RID_STR_COMMON_RESULTS_LOCATION_TYPE_DOCUMENT
+End Property
+Public Property Get CLocationPage() As String
+ CLocationPage = RID_STR_COMMON_RESULTS_LOCATION_TYPE_PAGE
+End Property
+Public Property Get CLocationWorkBook() As String
+ CLocationWorkBook = RID_STR_COMMON_RESULTS_LOCATION_TYPE_WORKBOOK
+End Property
+Public Property Get CLocationSheet() As String
+ CLocationSheet = RID_STR_COMMON_RESULTS_LOCATION_TYPE_SHEET
+End Property
+Public Property Get CLocationPresentation() As String
+ CLocationPresentation = RID_STR_COMMON_RESULTS_LOCATION_TYPE_PRESENTATION
+End Property
+Public Property Get CLocationSlide() As String
+ CLocationSlide = RID_STR_COMMON_RESULTS_LOCATION_TYPE_SLIDE
+End Property
+
+'General XML Constants - NOT localised
+Public Property Get CXMLLocationDocument() As String
+ CXMLLocationDocument = "Document"
+End Property
+Public Property Get CXMLLocationPage() As String
+ CXMLLocationPage = "Page"
+End Property
+Public Property Get CXMLLocationWorkBook() As String
+ CXMLLocationWorkBook = "Workbook"
+End Property
+Public Property Get CXMLLocationSheet() As String
+ CXMLLocationSheet = "Sheet"
+End Property
+Public Property Get CXMLLocationPresentation() As String
+ CXMLLocationPresentation = "Presentation"
+End Property
+Public Property Get CXMLLocationSlide() As String
+ CXMLLocationSlide = "Slide"
+End Property
+
+'Settable Properties
+Public Property Get IssueID() As Integer
+ IssueID = mIssueID
+End Property
+
+Public Property Let IssueID(ByVal vNewValue As Integer)
+ mIssueID = vNewValue
+End Property
+Public Property Get IssueType() As String
+ IssueType = mIssueType
+End Property
+
+Public Property Let IssueType(ByVal vNewValue As String)
+ mIssueType = vNewValue
+End Property
+Public Property Get IssueTypeXML() As String
+ IssueTypeXML = mIssueTypeXML
+End Property
+
+Public Property Let IssueTypeXML(ByVal vNewValue As String)
+ mIssueTypeXML = vNewValue
+End Property
+Public Property Get SubType() As String
+ SubType = mSubType
+End Property
+
+Public Property Let SubType(ByVal vNewValue As String)
+ mSubType = vNewValue
+End Property
+Public Property Get SubTypeXML() As String
+ SubTypeXML = mSubTypeXML
+End Property
+
+Public Property Let SubTypeXML(ByVal vNewValue As String)
+ mSubTypeXML = vNewValue
+End Property
+
+Public Property Get Location() As String
+ Location = mLocation
+End Property
+
+Public Property Let Location(ByVal vNewValue As String)
+ mLocation = vNewValue
+End Property
+Public Property Get locationXML() As String
+ locationXML = mLocationXML
+End Property
+
+Public Property Let locationXML(ByVal vNewValue As String)
+ mLocationXML = vNewValue
+End Property
+
+Public Property Get SubLocation() As Variant
+ SubLocation = mSubLocation
+End Property
+
+Public Property Let SubLocation(ByVal vNewValue As Variant)
+ mSubLocation = vNewValue
+End Property
+
+Public Property Get Line() As Long
+ Line = mLine
+End Property
+
+Public Property Let Line(ByVal vNewValue As Long)
+ mLine = vNewValue
+End Property
+Public Property Get column() As Variant
+ column = mColumn
+End Property
+
+Public Property Let column(ByVal vNewValue As Variant)
+ mColumn = vNewValue
+End Property
+
+Public Property Get Attributes() As Collection
+ Set Attributes = mAttributes
+End Property
+
+Public Property Let Attributes(ByVal vNewValue As Collection)
+ Set mAttributes = vNewValue
+End Property
+Public Property Get Values() As Collection
+ Set Values = mValues
+End Property
+
+Public Property Let Values(ByVal vNewValue As Collection)
+ Set mValues = vNewValue
+End Property
+
+Public Property Get Preparable() As Boolean
+ Preparable = mPreparable
+End Property
+
+Public Property Let Preparable(ByVal vNewValue As Boolean)
+ mPreparable = vNewValue
+End Property
+
+
+
+Private Sub Class_Initialize()
+ Set mAttributes = New Collection
+ Set mValues = New Collection
+ mIssueID = -1
+ mLine = -1
+ mColumn = ""
+ mSubLocation = ""
+ mPreparable = False
+End Sub
+Private Sub Class_Terminate()
+ Set mAttributes = Nothing
+ Set mValues = Nothing
+End Sub
+
diff --git a/migrationanalysis/src/driver_docs/sources/LocalizeResults.bas b/migrationanalysis/src/driver_docs/sources/LocalizeResults.bas
new file mode 100644
index 000000000000..604071625764
--- /dev/null
+++ b/migrationanalysis/src/driver_docs/sources/LocalizeResults.bas
@@ -0,0 +1,308 @@
+Attribute VB_Name = "LocalizeResults"
+Sub Localize_WorkBook(aWorkBook As WorkBook)
+ On Error Resume Next
+ aWorkBook.Names("RID_RESXLS_COST_Action_Settings").RefersToRange.Cells(1, 1) = RID_RESXLS_COST_Action_Settings
+ aWorkBook.Names("RID_RESXLS_COST_Add_custom_properties_to_document_Properties_Summary_Comments_field").RefersToRange.Cells(1, 1) = RID_RESXLS_COST_Add_custom_properties_to_document_Properties_Summary_Comments_field
+ aWorkBook.Names("RID_RESXLS_COST_Additional_Weighting_Factors").RefersToRange.Cells(1, 1) = RID_RESXLS_COST_Additional_Weighting_Factors
+ aWorkBook.Names("RID_RESXLS_COST_All_sheets__256_will_need_to_be_moved_to_a_new_workbook").RefersToRange.Cells(1, 1) = RID_RESXLS_COST_All_sheets__256_will_need_to_be_moved_to_a_new_workbook
+ aWorkBook.Names("RID_RESXLS_COST_Appearance").RefersToRange.Cells(1, 1) = RID_RESXLS_COST_Appearance
+ aWorkBook.Names("RID_RESXLS_COST_Application").RefersToRange.Cells(1, 1) = RID_RESXLS_COST_Application
+ aWorkBook.Names("RID_RESXLS_COST_Border_Styles").RefersToRange.Cells(1, 1) = RID_RESXLS_COST_Border_Styles
+ aWorkBook.Names("RID_RESXLS_COST_Cell_Attributes").RefersToRange.Cells(1, 1) = RID_RESXLS_COST_Cell_Attributes
+ aWorkBook.Names("RID_RESXLS_COST_CELL_SPAN_WORKAROUND").RefersToRange.Cells(1, 1) = RID_RESXLS_COST_CELL_SPAN_WORKAROUND
+ aWorkBook.Names("RID_RESXLS_COST_Cell_Spanning_Page").RefersToRange.Cells(1, 1) = RID_RESXLS_COST_Cell_Spanning_Page
+ aWorkBook.Names("RID_RESXLS_COST_ChangesAndReviewing").RefersToRange.Cells(1, 1) = RID_RESXLS_COST_ChangesAndReviewing
+ aWorkBook.Names("RID_RESXLS_COST_Charts_And_Tables").RefersToRange.Cells(1, 1) = RID_RESXLS_COST_Charts_And_Tables
+ aWorkBook.Names("RID_RESXLS_COST_Comment").RefersToRange.Cells(1, 1) = RID_RESXLS_COST_Comment
+ aWorkBook.Names("RID_RESXLS_COST_Content_And_Document_Properties").RefersToRange.Cells(1, 1) = RID_RESXLS_COST_Content_And_Document_Properties
+ aWorkBook.Names("RID_RESXLS_COST_ContentAndDocumentProperties").RefersToRange.Cells(1, 1) = RID_RESXLS_COST_ContentAndDocumentProperties
+ aWorkBook.Names("RID_RESXLS_COST_Controls").RefersToRange.Cells(1, 1) = RID_RESXLS_COST_Controls
+ aWorkBook.Names("RID_RESXLS_COST_Cost").RefersToRange.Cells(1, 1) = RID_RESXLS_COST_Cost
+ aWorkBook.Names("RID_RESXLS_COST_Cost__In_simple_cases_cut_and_paste_to_new_sheet_3___5_min").RefersToRange.Cells(1, 1) = RID_RESXLS_COST_Cost__In_simple_cases_cut_and_paste_to_new_sheet_3___5_min
+ aWorkBook.Names("RID_RESXLS_COST_COST_0").RefersToRange.Cells(1, 1) = RID_RESXLS_COST_COST_0
+ aWorkBook.Names("RID_RESXLS_COST_COST_EMBED_CHART").RefersToRange.Cells(1, 1) = RID_RESXLS_COST_COST_EMBED_CHART
+ aWorkBook.Names("RID_RESXLS_COST_COST_ERROR_TYPE").RefersToRange.Cells(1, 1) = RID_RESXLS_COST_COST_ERROR_TYPE
+ aWorkBook.Names("RID_RESXLS_COST_COST_INFO").RefersToRange.Cells(1, 1) = RID_RESXLS_COST_COST_INFO
+ aWorkBook.Names("RID_RESXLS_COST_COST_INVAL_PASS").RefersToRange.Cells(1, 1) = RID_RESXLS_COST_COST_INVAL_PASS
+ aWorkBook.Names("RID_RESXLS_COST_COST_INVALID_WORKSHEET_NAME").RefersToRange.Cells(1, 1) = RID_RESXLS_COST_COST_INVALID_WORKSHEET_NAME
+ aWorkBook.Names("RID_RESXLS_COST_Cost_of_4_min_per_line__takes_no_account_of_complexity_of_code__number_of_comment_lines_and_so_on").RefersToRange.Cells(1, 1) = RID_RESXLS_COST_Cost_of_4_min_per_line__takes_no_account_of_complexity_of_code__number_of_comment_lines_and_so_on
+ aWorkBook.Names("RID_RESXLS_COST_Cost_per_Issue_or_Factor__min").RefersToRange.Cells(1, 1) = RID_RESXLS_COST_Cost_per_Issue_or_Factor__min
+ aWorkBook.Names("RID_RESXLS_COST_COST_PIVOT").RefersToRange.Cells(1, 1) = RID_RESXLS_COST_COST_PIVOT
+ aWorkBook.Names("RID_RESXLS_COST_COST_SHEET_CHART").RefersToRange.Cells(1, 1) = RID_RESXLS_COST_COST_SHEET_CHART
+ aWorkBook.Names("RID_RESXLS_COST_Cost_variations_occur_because_of_the_use_of_macros_with_controls").RefersToRange.Cells(1, 1) = RID_RESXLS_COST_Cost_variations_occur_because_of_the_use_of_macros_with_controls
+ aWorkBook.Names("RID_RESXLS_COST_COST_VBA_CONT_TYPE").RefersToRange.Cells(1, 1) = RID_RESXLS_COST_COST_VBA_CONT_TYPE
+ aWorkBook.Names("RID_RESXLS_COST_COST_VBA_CONTROLS").RefersToRange.Cells(1, 1) = RID_RESXLS_COST_COST_VBA_CONTROLS
+ aWorkBook.Names("RID_RESXLS_COST_COST_VBA_FORMS").RefersToRange.Cells(1, 1) = RID_RESXLS_COST_COST_VBA_FORMS
+ aWorkBook.Names("RID_RESXLS_COST_COST_VBA_LOC").RefersToRange.Cells(1, 1) = RID_RESXLS_COST_COST_VBA_LOC
+ aWorkBook.Names("RID_RESXLS_COST_COST_VBA_PROPS").RefersToRange.Cells(1, 1) = RID_RESXLS_COST_COST_VBA_PROPS
+ aWorkBook.Names("RID_RESXLS_COST_Costs__min").RefersToRange.Cells(1, 1) = RID_RESXLS_COST_Costs__min
+ aWorkBook.Names("RID_RESXLS_COST_Custom_Bullet_List").RefersToRange.Cells(1, 1) = RID_RESXLS_COST_Custom_Bullet_List
+ aWorkBook.Names("RID_RESXLS_COST_Document_Custom_Properties").RefersToRange.Cells(1, 1) = RID_RESXLS_COST_Document_Custom_Properties
+ aWorkBook.Names("RID_RESXLS_COST_Document_Parts_Protection").RefersToRange.Cells(1, 1) = RID_RESXLS_COST_Document_Parts_Protection
+ aWorkBook.Names("RID_RESXLS_COST_Embedded_Chart").RefersToRange.Cells(1, 1) = RID_RESXLS_COST_Embedded_Chart
+ aWorkBook.Names("RID_RESXLS_COST_embedded_objects").RefersToRange.Cells(1, 1) = RID_RESXLS_COST_embedded_objects
+ aWorkBook.Names("RID_RESXLS_COST_Embedded_OLE_Object").RefersToRange.Cells(1, 1) = RID_RESXLS_COST_Embedded_OLE_Object
+ aWorkBook.Names("RID_RESXLS_COST_Excel").RefersToRange.Cells(1, 1) = RID_RESXLS_COST_Excel
+ aWorkBook.Names("RID_RESXLS_COST_Excel_Totals").RefersToRange.Cells(1, 1) = RID_RESXLS_COST_Excel_Totals
+ aWorkBook.Names("RID_RESXLS_COST_External").RefersToRange.Cells(1, 1) = RID_RESXLS_COST_External
+ aWorkBook.Names("RID_RESXLS_COST_External_References_In_Macro___Module__Class_or_UserForm").RefersToRange.Cells(1, 1) = RID_RESXLS_COST_External_References_In_Macro___Module__Class_or_UserForm
+ aWorkBook.Names("RID_RESXLS_COST_Factor_Count").RefersToRange.Cells(1, 1) = RID_RESXLS_COST_Factor_Count
+ aWorkBook.Names("RID_RESXLS_COST_Fields").RefersToRange.Cells(1, 1) = RID_RESXLS_COST_Fields
+ aWorkBook.Names("RID_RESXLS_COST_Filters").RefersToRange.Cells(1, 1) = RID_RESXLS_COST_Filters
+ aWorkBook.Names("RID_RESXLS_COST_Fixed_SO7").RefersToRange.Cells(1, 1) = RID_RESXLS_COST_Fixed_SO7
+ aWorkBook.Names("RID_RESXLS_COST_Form_Field").RefersToRange.Cells(1, 1) = RID_RESXLS_COST_Form_Field
+ aWorkBook.Names("RID_RESXLS_COST_Format").RefersToRange.Cells(1, 1) = RID_RESXLS_COST_Format
+ aWorkBook.Names("RID_RESXLS_COST_Functions").RefersToRange.Cells(1, 1) = RID_RESXLS_COST_Functions
+ aWorkBook.Names("RID_RESXLS_COST_HEADERFOOTER_WORKAROUND").RefersToRange.Cells(1, 1) = RID_RESXLS_COST_HEADERFOOTER_WORKAROUND
+ aWorkBook.Names("RID_RESXLS_COST_Hours_Per_MD").RefersToRange.Cells(1, 1) = RID_RESXLS_COST_Hours_Per_MD
+ aWorkBook.Names("RID_RESXLS_COST_Indexes_And_References").RefersToRange.Cells(1, 1) = RID_RESXLS_COST_Indexes_And_References
+ aWorkBook.Names("RID_RESXLS_COST_Invalid_Password_Entered").RefersToRange.Cells(1, 1) = RID_RESXLS_COST_Invalid_Password_Entered
+ aWorkBook.Names("RID_RESXLS_COST_Invalid_Worksheet_Name").RefersToRange.Cells(1, 1) = RID_RESXLS_COST_Invalid_Worksheet_Name
+ aWorkBook.Names("RID_RESXLS_COST_Issue__18_of_the_24_table_border_styles_do_not_display_correctly").RefersToRange.Cells(1, 1) = RID_RESXLS_COST_Issue__18_of_the_24_table_border_styles_do_not_display_correctly
+ aWorkBook.Names("RID_RESXLS_COST_Issue__256_sheet_limit_exceeded").RefersToRange.Cells(1, 1) = RID_RESXLS_COST_Issue__256_sheet_limit_exceeded
+ aWorkBook.Names("RID_RESXLS_COST_Issue__32000_row_limit_exceeded").RefersToRange.Cells(1, 1) = RID_RESXLS_COST_Issue__32000_row_limit_exceeded
+ aWorkBook.Names("RID_RESXLS_COST_Issue__A_worksheet_in_the_workbook_has_a_name_with_invalid_characters").RefersToRange.Cells(1, 1) = RID_RESXLS_COST_Issue__A_worksheet_in_the_workbook_has_a_name_with_invalid_characters
+ aWorkBook.Names("RID_RESXLS_COST_Issue__Calls_to_windows_API_functions_are_windows_specific").RefersToRange.Cells(1, 1) = RID_RESXLS_COST_Issue__Calls_to_windows_API_functions_are_windows_specific
+ aWorkBook.Names("RID_RESXLS_COST_Issue__Chart_support_is_limited_in_SO7").RefersToRange.Cells(1, 1) = RID_RESXLS_COST_Issue__Chart_support_is_limited_in_SO7
+ aWorkBook.Names("RID_RESXLS_COST_Issue__Comments_are_lost_on_migration_to_SO7").RefersToRange.Cells(1, 1) = RID_RESXLS_COST_Issue__Comments_are_lost_on_migration_to_SO7
+ aWorkBook.Names("RID_RESXLS_COST_Issue__Custom_Properties_are_lost_on_migration").RefersToRange.Cells(1, 1) = RID_RESXLS_COST_Issue__Custom_Properties_are_lost_on_migration
+ aWorkBook.Names("RID_RESXLS_COST_Issue__Document_is_password_protected_and_cannot_be_opened_by_SO").RefersToRange.Cells(1, 1) = RID_RESXLS_COST_Issue__Document_is_password_protected_and_cannot_be_opened_by_SO
+ aWorkBook.Names("RID_RESXLS_COST_Issue__External_functions_not_supported_by_SO7").RefersToRange.Cells(1, 1) = RID_RESXLS_COST_Issue__External_functions_not_supported_by_SO7
+ aWorkBook.Names("RID_RESXLS_COST_Issue__External_references_are_windows_specific").RefersToRange.Cells(1, 1) = RID_RESXLS_COST_Issue__External_references_are_windows_specific
+ aWorkBook.Names("RID_RESXLS_COST_Issue__Fields_are_imported_but_need_to_have_the_link_to_datasource_reset").RefersToRange.Cells(1, 1) = RID_RESXLS_COST_Issue__Fields_are_imported_but_need_to_have_the_link_to_datasource_reset
+ aWorkBook.Names("RID_RESXLS_COST_Issue__Graphics___frames_in_header_footer_tend_to_be_misplaced").RefersToRange.Cells(1, 1) = RID_RESXLS_COST_Issue__Graphics___frames_in_header_footer_tend_to_be_misplaced
+ aWorkBook.Names("RID_RESXLS_COST_Issue__Incorrect_password_entered").RefersToRange.Cells(1, 1) = RID_RESXLS_COST_Issue__Incorrect_password_entered
+ aWorkBook.Names("RID_RESXLS_COST_Issue__Information_relating_to_the_data_source_is_lost_in_migration").RefersToRange.Cells(1, 1) = RID_RESXLS_COST_Issue__Information_relating_to_the_data_source_is_lost_in_migration
+ aWorkBook.Names("RID_RESXLS_COST_Issue__Invalid_password_entered_Rerun_analysis").RefersToRange.Cells(1, 1) = RID_RESXLS_COST_Issue__Invalid_password_entered_Rerun_analysis
+ aWorkBook.Names("RID_RESXLS_COST_Issue__Lost_during_migration_No_StarOffice_equivalent").RefersToRange.Cells(1, 1) = RID_RESXLS_COST_Issue__Lost_during_migration_No_StarOffice_equivalent
+ aWorkBook.Names("RID_RESXLS_COST_Issue__Macros_from_old_workbook_versions_do_not_import_into_SO7").RefersToRange.Cells(1, 1) = RID_RESXLS_COST_Issue__Macros_from_old_workbook_versions_do_not_import_into_SO7
+ aWorkBook.Names("RID_RESXLS_COST_Issue__Modules_will_need_porting_to_StarOffice_Basic").RefersToRange.Cells(1, 1) = RID_RESXLS_COST_Issue__Modules_will_need_porting_to_StarOffice_Basic
+ aWorkBook.Names("RID_RESXLS_COST_Issue__Most_migrate_ok_but_do_not_roundtrip").RefersToRange.Cells(1, 1) = RID_RESXLS_COST_Issue__Most_migrate_ok_but_do_not_roundtrip
+ aWorkBook.Names("RID_RESXLS_COST_Issue__Movies_are_not_supported_by_SO7").RefersToRange.Cells(1, 1) = RID_RESXLS_COST_Issue__Movies_are_not_supported_by_SO7
+ aWorkBook.Names("RID_RESXLS_COST_Issue__Need_to_set_these_to_be_included_in_TOC_in_SO7").RefersToRange.Cells(1, 1) = RID_RESXLS_COST_Issue__Need_to_set_these_to_be_included_in_TOC_in_SO7
+ aWorkBook.Names("RID_RESXLS_COST_Issue__Password_protection_of_comments__tracked_changes_and_forms_is_lost").RefersToRange.Cells(1, 1) = RID_RESXLS_COST_Issue__Password_protection_of_comments__tracked_changes_and_forms_is_lost
+ aWorkBook.Names("RID_RESXLS_COST_Issue__Pivot_charts_are_not_supported_by_SO7").RefersToRange.Cells(1, 1) = RID_RESXLS_COST_Issue__Pivot_charts_are_not_supported_by_SO7
+ aWorkBook.Names("RID_RESXLS_COST_Issue__Presents_a_cross_platform_interoperability_issue").RefersToRange.Cells(1, 1) = RID_RESXLS_COST_Issue__Presents_a_cross_platform_interoperability_issue
+ aWorkBook.Names("RID_RESXLS_COST_Issue__Print_wide_pages_not_supported").RefersToRange.Cells(1, 1) = RID_RESXLS_COST_Issue__Print_wide_pages_not_supported
+ aWorkBook.Names("RID_RESXLS_COST_Issue__Shading_can_be_applied_to_fields_and_to_controls_separately_in_Word").RefersToRange.Cells(1, 1) = RID_RESXLS_COST_Issue__Shading_can_be_applied_to_fields_and_to_controls_separately_in_Word
+ aWorkBook.Names("RID_RESXLS_COST_Issue__Table_imported_as_text_as_no_StarOffice_equivalent").RefersToRange.Cells(1, 1) = RID_RESXLS_COST_Issue__Table_imported_as_text_as_no_StarOffice_equivalent
+ aWorkBook.Names("RID_RESXLS_COST_Issue__Tables_nested_in_tables_are_not_supported_by_SO7").RefersToRange.Cells(1, 1) = RID_RESXLS_COST_Issue__Tables_nested_in_tables_are_not_supported_by_SO7
+ aWorkBook.Names("RID_RESXLS_COST_Issue__Tabs_are_incorrect_after_migration").RefersToRange.Cells(1, 1) = RID_RESXLS_COST_Issue__Tabs_are_incorrect_after_migration
+ aWorkBook.Names("RID_RESXLS_COST_Issue__Text_form_fields_roundtrip_as_Fill_In_field").RefersToRange.Cells(1, 1) = RID_RESXLS_COST_Issue__Text_form_fields_roundtrip_as_Fill_In_field
+ aWorkBook.Names("RID_RESXLS_COST_Issue__Unsupported_formatting_set").RefersToRange.Cells(1, 1) = RID_RESXLS_COST_Issue__Unsupported_formatting_set
+ aWorkBook.Names("RID_RESXLS_COST_Issue__Unsupported_function_type").RefersToRange.Cells(1, 1) = RID_RESXLS_COST_Issue__Unsupported_function_type
+ aWorkBook.Names("RID_RESXLS_COST_Issue__Userform_controls_will_need_porting_to_StarOffice_Basic").RefersToRange.Cells(1, 1) = RID_RESXLS_COST_Issue__Userform_controls_will_need_porting_to_StarOffice_Basic
+ aWorkBook.Names("RID_RESXLS_COST_Issue__Userforms_controls_will_need_porting_to_StarOffice_Basic").RefersToRange.Cells(1, 1) = RID_RESXLS_COST_Issue__Userforms_controls_will_need_porting_to_StarOffice_Basic
+ aWorkBook.Names("RID_RESXLS_COST_Issue__Userforms_will_need_porting_to_StarOffice_Basic").RefersToRange.Cells(1, 1) = RID_RESXLS_COST_Issue__Userforms_will_need_porting_to_StarOffice_Basic
+ aWorkBook.Names("RID_RESXLS_COST_Issue__VBProject_is_password_protected_Remove_password__rerun_analysis").RefersToRange.Cells(1, 1) = RID_RESXLS_COST_Issue__VBProject_is_password_protected_Remove_password__rerun_analysis
+ aWorkBook.Names("RID_RESXLS_COST_Issue__Will_need_refreshing_in_SO7_External_datasources_and_functions_are_not_supported").RefersToRange.Cells(1, 1) = RID_RESXLS_COST_Issue__Will_need_refreshing_in_SO7_External_datasources_and_functions_are_not_supported
+ aWorkBook.Names("RID_RESXLS_COST_Issue__Workbook_protection_is_not_supported").RefersToRange.Cells(1, 1) = RID_RESXLS_COST_Issue__Workbook_protection_is_not_supported
+ aWorkBook.Names("RID_RESXLS_COST_Issue__Writer_cannot_correctly_display_cells_spanning_more_than_1_page").RefersToRange.Cells(1, 1) = RID_RESXLS_COST_Issue__Writer_cannot_correctly_display_cells_spanning_more_than_1_page
+ aWorkBook.Names("RID_RESXLS_COST_Issue_Category").RefersToRange.Cells(1, 1) = RID_RESXLS_COST_Issue_Category
+ aWorkBook.Names("RID_RESXLS_COST_Issue_Count").RefersToRange.Cells(1, 1) = RID_RESXLS_COST_Issue_Count
+ aWorkBook.Names("RID_RESXLS_COST_Issue_Type").RefersToRange.Cells(1, 1) = RID_RESXLS_COST_Issue_Type
+ aWorkBook.Names("RID_RESXLS_COST_Linked_OLE_Object").RefersToRange.Cells(1, 1) = RID_RESXLS_COST_Linked_OLE_Object
+ aWorkBook.Names("RID_RESXLS_COST_Mail_Merge_Datasource").RefersToRange.Cells(1, 1) = RID_RESXLS_COST_Mail_Merge_Datasource
+ aWorkBook.Names("RID_RESXLS_COST_Mail_Merge_Field").RefersToRange.Cells(1, 1) = RID_RESXLS_COST_Mail_Merge_Field
+ aWorkBook.Names("RID_RESXLS_COST_Major_Issue").RefersToRange.Cells(1, 1) = RID_RESXLS_COST_Major_Issue
+ aWorkBook.Names("RID_RESXLS_COST_MAX_SHEETS_WORKAROUND").RefersToRange.Cells(1, 1) = RID_RESXLS_COST_MAX_SHEETS_WORKAROUND
+ aWorkBook.Names("RID_RESXLS_COST_Maximum_Rows_Exceeded").RefersToRange.Cells(1, 1) = RID_RESXLS_COST_Maximum_Rows_Exceeded
+ aWorkBook.Names("RID_RESXLS_COST_Maximum_Sheets_Exceeded").RefersToRange.Cells(1, 1) = RID_RESXLS_COST_Maximum_Sheets_Exceeded
+ aWorkBook.Names("RID_RESXLS_COST_Migration_Issues_Costs").RefersToRange.Cells(1, 1) = RID_RESXLS_COST_Migration_Issues_Costs
+ aWorkBook.Names("RID_RESXLS_COST_Movie").RefersToRange.Cells(1, 1) = RID_RESXLS_COST_Movie
+ aWorkBook.Names("RID_RESXLS_COST_NESTED_TABLE_WORKAROUND").RefersToRange.Cells(1, 1) = RID_RESXLS_COST_NESTED_TABLE_WORKAROUND
+ aWorkBook.Names("RID_RESXLS_COST_Nested_Tables").RefersToRange.Cells(1, 1) = RID_RESXLS_COST_Nested_Tables
+ aWorkBook.Names("RID_RESXLS_COST_Not_Planned").RefersToRange.Cells(1, 1) = RID_RESXLS_COST_Not_Planned
+ aWorkBook.Names("RID_RESXLS_COST_Notes_And_Handouts").RefersToRange.Cells(1, 1) = RID_RESXLS_COST_Notes_And_Handouts
+ aWorkBook.Names("RID_RESXLS_COST_Number_Of_External_References").RefersToRange.Cells(1, 1) = RID_RESXLS_COST_Number_Of_External_References
+ aWorkBook.Names("RID_RESXLS_COST_Number_Of_Lines").RefersToRange.Cells(1, 1) = RID_RESXLS_COST_Number_Of_Lines
+ aWorkBook.Names("RID_RESXLS_COST_Number_of_Lines_in_Unique_Modules").RefersToRange.Cells(1, 1) = RID_RESXLS_COST_Number_of_Lines_in_Unique_Modules
+ aWorkBook.Names("RID_RESXLS_COST_Number_of_Modules").RefersToRange.Cells(1, 1) = RID_RESXLS_COST_Number_of_Modules
+ aWorkBook.Names("RID_RESXLS_COST_Number_of_Unique_Modules").RefersToRange.Cells(1, 1) = RID_RESXLS_COST_Number_of_Unique_Modules
+ aWorkBook.Names("RID_RESXLS_COST_Numbering_Reference").RefersToRange.Cells(1, 1) = RID_RESXLS_COST_Numbering_Reference
+ aWorkBook.Names("RID_RESXLS_COST_Numbering_Reference_Comment").RefersToRange.Cells(1, 1) = RID_RESXLS_COST_Numbering_Reference_Comment
+ aWorkBook.Names("RID_RESXLS_COST_Object_In_Header_Footer").RefersToRange.Cells(1, 1) = RID_RESXLS_COST_Object_In_Header_Footer
+ aWorkBook.Names("RID_RESXLS_COST_Objects_And_Graphics").RefersToRange.Cells(1, 1) = RID_RESXLS_COST_Objects_And_Graphics
+ aWorkBook.Names("RID_RESXLS_COST_Objects_Graphics_And_Frames").RefersToRange.Cells(1, 1) = RID_RESXLS_COST_Objects_Graphics_And_Frames
+ aWorkBook.Names("RID_RESXLS_COST_Objects_Graphics_And_Textboxes").RefersToRange.Cells(1, 1) = RID_RESXLS_COST_Objects_Graphics_And_Textboxes
+ aWorkBook.Names("RID_RESXLS_COST_Old_Workbook_Version").RefersToRange.Cells(1, 1) = RID_RESXLS_COST_Old_Workbook_Version
+ aWorkBook.Names("RID_RESXLS_COST_OLE_Control").RefersToRange.Cells(1, 1) = RID_RESXLS_COST_OLE_Control
+ aWorkBook.Names("RID_RESXLS_COST_OLECONTR_COST").RefersToRange.Cells(1, 1) = RID_RESXLS_COST_OLECONTR_COST
+ aWorkBook.Names("RID_RESXLS_COST_Page_Setup").RefersToRange.Cells(1, 1) = RID_RESXLS_COST_Page_Setup
+ aWorkBook.Names("RID_RESXLS_COST_Password_Protected").RefersToRange.Cells(1, 1) = RID_RESXLS_COST_Password_Protected
+ aWorkBook.Names("RID_RESXLS_COST_Password_Protection").RefersToRange.Cells(1, 1) = RID_RESXLS_COST_Password_Protection
+ aWorkBook.Names("RID_RESXLS_COST_Pivot").RefersToRange.Cells(1, 1) = RID_RESXLS_COST_Pivot
+ aWorkBook.Names("RID_RESXLS_COST_Planned_SO8").RefersToRange.Cells(1, 1) = RID_RESXLS_COST_Planned_SO8
+ aWorkBook.Names("RID_RESXLS_COST_Portability").RefersToRange.Cells(1, 1) = RID_RESXLS_COST_Portability
+ aWorkBook.Names("RID_RESXLS_COST_PowerPoint").RefersToRange.Cells(1, 1) = RID_RESXLS_COST_PowerPoint
+ aWorkBook.Names("RID_RESXLS_COST_PowerPoint_Totals").RefersToRange.Cells(1, 1) = RID_RESXLS_COST_PowerPoint_Totals
+ aWorkBook.Names("RID_RESXLS_COST_Prepared_Issue_Count").RefersToRange.Cells(1, 1) = RID_RESXLS_COST_Prepared_Issue_Count
+ aWorkBook.Names("RID_RESXLS_COST_Prepared_Savings__min").RefersToRange.Cells(1, 1) = RID_RESXLS_COST_Prepared_Savings__min
+ aWorkBook.Names("RID_RESXLS_COST_Properties___Module__Class_or_UserForm").RefersToRange.Cells(1, 1) = RID_RESXLS_COST_Properties___Module__Class_or_UserForm
+ aWorkBook.Names("RID_RESXLS_COST_Remove_password_to_open").RefersToRange.Cells(1, 1) = RID_RESXLS_COST_Remove_password_to_open
+ aWorkBook.Names("RID_RESXLS_COST_Remove_the_invalid_characters_from_the_worksheet_name").RefersToRange.Cells(1, 1) = RID_RESXLS_COST_Remove_the_invalid_characters_from_the_worksheet_name
+ aWorkBook.Names("RID_RESXLS_COST_Rerun_analysis_with_correct_password").RefersToRange.Cells(1, 1) = RID_RESXLS_COST_Rerun_analysis_with_correct_password
+ aWorkBook.Names("RID_RESXLS_COST_Reset_link_to_Data_Base_having_setup_a_Datasource_in_SO7").RefersToRange.Cells(1, 1) = RID_RESXLS_COST_Reset_link_to_Data_Base_having_setup_a_Datasource_in_SO7
+ aWorkBook.Names("RID_RESXLS_COST_set_cost_factor_if_the_macro_has_to_be_ported_off_Windows").RefersToRange.Cells(1, 1) = RID_RESXLS_COST_set_cost_factor_if_the_macro_has_to_be_ported_off_Windows
+ aWorkBook.Names("RID_RESXLS_COST_Save_workbook_as_a_new_workbook_version").RefersToRange.Cells(1, 1) = RID_RESXLS_COST_Save_workbook_as_a_new_workbook_version
+ aWorkBook.Names("RID_RESXLS_COST_Setup_Datasource_in_SO7_using_Tools__Datasource").RefersToRange.Cells(1, 1) = RID_RESXLS_COST_Setup_Datasource_in_SO7_using_Tools__Datasource
+ aWorkBook.Names("RID_RESXLS_COST_Sheet_Chart").RefersToRange.Cells(1, 1) = RID_RESXLS_COST_Sheet_Chart
+ aWorkBook.Names("RID_RESXLS_COST_Status").RefersToRange.Cells(1, 1) = RID_RESXLS_COST_Status
+ aWorkBook.Names("RID_RESXLS_COST_Table_Of_Authorities").RefersToRange.Cells(1, 1) = RID_RESXLS_COST_Table_Of_Authorities
+ aWorkBook.Names("RID_RESXLS_COST_Table_Of_Authorities_Field").RefersToRange.Cells(1, 1) = RID_RESXLS_COST_Table_Of_Authorities_Field
+ aWorkBook.Names("RID_RESXLS_COST_Table_Of_Contents").RefersToRange.Cells(1, 1) = RID_RESXLS_COST_Table_Of_Contents
+ aWorkBook.Names("RID_RESXLS_COST_Tables").RefersToRange.Cells(1, 1) = RID_RESXLS_COST_Tables
+ aWorkBook.Names("RID_RESXLS_COST_TOC_ISSUE_WORKAROUND").RefersToRange.Cells(1, 1) = RID_RESXLS_COST_TOC_ISSUE_WORKAROUND
+ aWorkBook.Names("RID_RESXLS_COST_Total_Cost___MD").RefersToRange.Cells(1, 1) = RID_RESXLS_COST_Total_Cost___MD
+ aWorkBook.Names("RID_RESXLS_COST_User_Error").RefersToRange.Cells(1, 1) = RID_RESXLS_COST_User_Error
+ aWorkBook.Names("RID_RESXLS_COST_User_Forms_Control_Count").RefersToRange.Cells(1, 1) = RID_RESXLS_COST_User_Forms_Control_Count
+ aWorkBook.Names("RID_RESXLS_COST_User_Forms_Control_Type_Count").RefersToRange.Cells(1, 1) = RID_RESXLS_COST_User_Forms_Control_Type_Count
+ aWorkBook.Names("RID_RESXLS_COST_User_Forms_Count").RefersToRange.Cells(1, 1) = RID_RESXLS_COST_User_Forms_Count
+ aWorkBook.Names("RID_RESXLS_COST_VBA_Macros").RefersToRange.Cells(1, 1) = RID_RESXLS_COST_VBA_Macros
+ aWorkBook.Names("RID_RESXLS_COST_Word").RefersToRange.Cells(1, 1) = RID_RESXLS_COST_Word
+ aWorkBook.Names("RID_RESXLS_COST_Word_Totals").RefersToRange.Cells(1, 1) = RID_RESXLS_COST_Word_Totals
+ aWorkBook.Names("RID_RESXLS_COST_Work_Around").RefersToRange.Cells(1, 1) = RID_RESXLS_COST_Work_Around
+ aWorkBook.Names("RID_RESXLS_COST_Workaround_Remove_protection_before_importing").RefersToRange.Cells(1, 1) = RID_RESXLS_COST_Workaround_Remove_protection_before_importing
+ aWorkBook.Names("RID_RESXLS_COST_WorkbookProtection").RefersToRange.Cells(1, 1) = RID_RESXLS_COST_WorkbookProtection
+ aWorkBook.Names("RID_RESXLS_DP_Accessed").RefersToRange.Cells(1, 1) = RID_RESXLS_DP_Accessed
+ aWorkBook.Names("RID_RESXLS_DP_All_Analysed_Documents___Properties").RefersToRange.Cells(1, 1) = RID_RESXLS_DP_All_Analysed_Documents___Properties
+ aWorkBook.Names("RID_RESXLS_DP_Application").RefersToRange.Cells(1, 1) = RID_RESXLS_DP_Application
+ aWorkBook.Names("RID_RESXLS_DP_Based_on_Template").RefersToRange.Cells(1, 1) = RID_RESXLS_DP_Based_on_Template
+ aWorkBook.Names("RID_RESXLS_DP_Costs").RefersToRange.Cells(1, 1) = RID_RESXLS_DP_Costs
+ aWorkBook.Names("RID_RESXLS_DP_Created").RefersToRange.Cells(1, 1) = RID_RESXLS_DP_Created
+ aWorkBook.Names("RID_RESXLS_DP_Document_Details").RefersToRange.Cells(1, 1) = RID_RESXLS_DP_Document_Details
+ aWorkBook.Names("RID_RESXLS_DP_Document_Issue_Costs").RefersToRange.Cells(1, 1) = RID_RESXLS_DP_Document_Issue_Costs
+ aWorkBook.Names("RID_RESXLS_DP_Document_Migration_Issues").RefersToRange.Cells(1, 1) = RID_RESXLS_DP_Document_Migration_Issues
+ aWorkBook.Names("RID_RESXLS_DP_Document_Name").RefersToRange.Cells(1, 1) = RID_RESXLS_DP_Document_Name
+ aWorkBook.Names("RID_RESXLS_DP_Document_Name_and_Path").RefersToRange.Cells(1, 1) = RID_RESXLS_DP_Document_Name_and_Path
+ aWorkBook.Names("RID_RESXLS_DP_Issues_Complex_count").RefersToRange.Cells(1, 1) = RID_RESXLS_DP_Issues_Complex_count
+ aWorkBook.Names("RID_RESXLS_DP_Last_Saved_By").RefersToRange.Cells(1, 1) = RID_RESXLS_DP_Last_Saved_By
+ aWorkBook.Names("RID_RESXLS_DP_Lines_of_Macro_Code").RefersToRange.Cells(1, 1) = RID_RESXLS_DP_Lines_of_Macro_Code
+ aWorkBook.Names("RID_RESXLS_DP_Macro_Issues").RefersToRange.Cells(1, 1) = RID_RESXLS_DP_Macro_Issues
+ aWorkBook.Names("RID_RESXLS_DP_Macro_Migration_Costs").RefersToRange.Cells(1, 1) = RID_RESXLS_DP_Macro_Migration_Costs
+ aWorkBook.Names("RID_RESXLS_DP_Macro_Migration_Issues").RefersToRange.Cells(1, 1) = RID_RESXLS_DP_Macro_Migration_Issues
+ aWorkBook.Names("RID_RESXLS_DP_Migration_Issues").RefersToRange.Cells(1, 1) = RID_RESXLS_DP_Migration_Issues
+ aWorkBook.Names("RID_RESXLS_DP_Minor_Issues").RefersToRange.Cells(1, 1) = RID_RESXLS_DP_Minor_Issues
+ aWorkBook.Names("RID_RESXLS_DP_Modified").RefersToRange.Cells(1, 1) = RID_RESXLS_DP_Modified
+ aWorkBook.Names("RID_RESXLS_DP_Pages_Sheets_Slides").RefersToRange.Cells(1, 1) = RID_RESXLS_DP_Pages_Sheets_Slides
+ aWorkBook.Names("RID_RESXLS_DP_Prepareable_Issues_Costs").RefersToRange.Cells(1, 1) = RID_RESXLS_DP_Prepareable_Issues_Costs
+ aWorkBook.Names("RID_RESXLS_DP_Prepared_Issues").RefersToRange.Cells(1, 1) = RID_RESXLS_DP_Prepared_Issues
+ aWorkBook.Names("RID_RESXLS_DP_Printed").RefersToRange.Cells(1, 1) = RID_RESXLS_DP_Printed
+ aWorkBook.Names("RID_RESXLS_DP_Revision").RefersToRange.Cells(1, 1) = RID_RESXLS_DP_Revision
+ aWorkBook.Names("RID_RESXLS_DP_User_Form_Count").RefersToRange.Cells(1, 1) = RID_RESXLS_DP_User_Form_Count
+ aWorkBook.Names("RID_RESXLS_ID_All_Documents_with_Issues___Issue_Details").RefersToRange.Cells(1, 1) = RID_RESXLS_ID_All_Documents_with_Issues___Issue_Details
+ aWorkBook.Names("RID_RESXLS_ID_Application").RefersToRange.Cells(1, 1) = RID_RESXLS_ID_Application
+ aWorkBook.Names("RID_RESXLS_ID_Column__Left").RefersToRange.Cells(1, 1) = RID_RESXLS_ID_Column__Left
+ aWorkBook.Names("RID_RESXLS_ID_Document_Name").RefersToRange.Cells(1, 1) = RID_RESXLS_ID_Document_Name
+ aWorkBook.Names("RID_RESXLS_ID_Document_Name_and_Path").RefersToRange.Cells(1, 1) = RID_RESXLS_ID_Document_Name_and_Path
+ aWorkBook.Names("RID_RESXLS_ID_Issue_Category").RefersToRange.Cells(1, 1) = RID_RESXLS_ID_Issue_Category
+ aWorkBook.Names("RID_RESXLS_ID_Issue_Details").RefersToRange.Cells(1, 1) = RID_RESXLS_ID_Issue_Details
+ aWorkBook.Names("RID_RESXLS_ID_Issue_Type").RefersToRange.Cells(1, 1) = RID_RESXLS_ID_Issue_Type
+ aWorkBook.Names("RID_RESXLS_ID_Line__Row__Top").RefersToRange.Cells(1, 1) = RID_RESXLS_ID_Line__Row__Top
+ aWorkBook.Names("RID_RESXLS_ID_Location").RefersToRange.Cells(1, 1) = RID_RESXLS_ID_Location
+ aWorkBook.Names("RID_RESXLS_ID_Location_Type").RefersToRange.Cells(1, 1) = RID_RESXLS_ID_Location_Type
+ aWorkBook.Names("RID_RESXLS_OV_3_to_6_months").RefersToRange.Cells(1, 1) = RID_RESXLS_OV_3_to_6_months
+ aWorkBook.Names("RID_RESXLS_OV_6_to_12_months").RefersToRange.Cells(1, 1) = RID_RESXLS_OV_6_to_12_months
+ aWorkBook.Names("RID_RESXLS_OV_Complex").RefersToRange.Cells(1, 1) = RID_RESXLS_OV_Complex
+ aWorkBook.Names("RID_RESXLS_OV_Cost_estimates_for_migration").RefersToRange.Cells(1, 1) = RID_RESXLS_OV_Cost_estimates_for_migration
+ aWorkBook.Names("RID_RESXLS_OV_Costs").RefersToRange.Cells(1, 1) = RID_RESXLS_OV_Costs
+ aWorkBook.Names("RID_RESXLS_OV_Docs_with_DocumentMigrationIssues").RefersToRange.Cells(1, 1) = RID_RESXLS_OV_Docs_with_DocumentMigrationIssues
+ aWorkBook.Names("RID_RESXLS_OV_Document_Migration_Costs").RefersToRange.Cells(1, 1) = RID_RESXLS_OV_Document_Migration_Costs
+ aWorkBook.Names("RID_RESXLS_OV_Document_Modification_Dates").RefersToRange.Cells(1, 1) = RID_RESXLS_OV_Document_Modification_Dates
+ aWorkBook.Names("RID_RESXLS_OV_Document_Type").RefersToRange.Cells(1, 1) = RID_RESXLS_OV_Document_Type
+ aWorkBook.Names("RID_RESXLS_OV_Documents_with_Macro_Migration_Issues").RefersToRange.Cells(1, 1) = RID_RESXLS_OV_Documents_with_Macro_Migration_Issues
+ aWorkBook.Names("RID_RESXLS_OV_Excel").RefersToRange.Cells(1, 1) = RID_RESXLS_OV_Excel
+ aWorkBook.Names("RID_RESXLS_OV_Excel_Costs").RefersToRange.Cells(1, 1) = RID_RESXLS_OV_Excel_Costs
+ aWorkBook.Names("RID_RESXLS_OV_Excel_Spreadsheet").RefersToRange.Cells(1, 1) = RID_RESXLS_OV_Excel_Spreadsheet
+ aWorkBook.Names("RID_RESXLS_OV_Excel_Template").RefersToRange.Cells(1, 1) = RID_RESXLS_OV_Excel_Template
+ aWorkBook.Names("RID_RESXLS_OV_GREATER_THAN_1_year").RefersToRange.Cells(1, 1) = RID_RESXLS_OV_GREATER_THAN_1_year
+ aWorkBook.Names("RID_RESXLS_OV_Last_Modified").RefersToRange.Cells(1, 1) = RID_RESXLS_OV_Last_Modified
+ aWorkBook.Names("RID_RESXLS_OV_LESS_3_months").RefersToRange.Cells(1, 1) = RID_RESXLS_OV_LESS_3_months
+ aWorkBook.Names("RID_RESXLS_OV_LESS_THAN3MONTHS").RefersToRange.Cells(1, 1) = RID_RESXLS_OV_LESS_THAN3MONTHS
+ aWorkBook.Names("RID_RESXLS_OV_Macro_Migration_Costs").RefersToRange.Cells(1, 1) = RID_RESXLS_OV_Macro_Migration_Costs
+ aWorkBook.Names("RID_RESXLS_OV_Medium").RefersToRange.Cells(1, 1) = RID_RESXLS_OV_Medium
+ aWorkBook.Names("RID_RESXLS_OV_Minor").RefersToRange.Cells(1, 1) = RID_RESXLS_OV_Minor
+ aWorkBook.Names("RID_RESXLS_OV_None").RefersToRange.Cells(1, 1) = RID_RESXLS_OV_None
+ aWorkBook.Names("RID_RESXLS_OV_Number").RefersToRange.Cells(1, 1) = RID_RESXLS_OV_Number
+ aWorkBook.Names("RID_RESXLS_OV_Number_of_Documents_Analyzed").RefersToRange.Cells(1, 1) = RID_RESXLS_OV_Number_of_Documents_Analyzed
+ aWorkBook.Names("RID_RESXLS_OV_NumberOfDocs").RefersToRange.Cells(1, 1) = RID_RESXLS_OV_NumberOfDocs
+ aWorkBook.Names("RID_RESXLS_OV_Potential_savings_macro_conversion").RefersToRange.Cells(1, 1) = RID_RESXLS_OV_Potential_savings_macro_conversion
+ aWorkBook.Names("RID_RESXLS_OV_Potential_savings_prepared_docs").RefersToRange.Cells(1, 1) = RID_RESXLS_OV_Potential_savings_prepared_docs
+ aWorkBook.Names("RID_RESXLS_OV_PowerPoint").RefersToRange.Cells(1, 1) = RID_RESXLS_OV_PowerPoint
+ aWorkBook.Names("RID_RESXLS_OV_PowerPoint_Costs").RefersToRange.Cells(1, 1) = RID_RESXLS_OV_PowerPoint_Costs
+ aWorkBook.Names("RID_RESXLS_OV_PowerPoint_Document").RefersToRange.Cells(1, 1) = RID_RESXLS_OV_PowerPoint_Document
+ aWorkBook.Names("RID_RESXLS_OV_PowerPoint_Template").RefersToRange.Cells(1, 1) = RID_RESXLS_OV_PowerPoint_Template
+ aWorkBook.Names("RID_RESXLS_OV_Simple").RefersToRange.Cells(1, 1) = RID_RESXLS_OV_Simple
+ aWorkBook.Names("RID_RESXLS_OV_Total").RefersToRange.Cells(1, 1) = RID_RESXLS_OV_Total
+ aWorkBook.Names("RID_RESXLS_OV_Totals").RefersToRange.Cells(1, 1) = RID_RESXLS_OV_Totals
+ aWorkBook.Names("RID_RESXLS_OV_Word").RefersToRange.Cells(1, 1) = RID_RESXLS_OV_Word
+ aWorkBook.Names("RID_RESXLS_OV_Word_Costs").RefersToRange.Cells(1, 1) = RID_RESXLS_OV_Word_Costs
+ aWorkBook.Names("RID_RESXLS_OV_Word_Document").RefersToRange.Cells(1, 1) = RID_RESXLS_OV_Word_Document
+ aWorkBook.Names("RID_RESXLS_OV_Word_Template").RefersToRange.Cells(1, 1) = RID_RESXLS_OV_Word_Template
+ aWorkBook.Names("RID_RESXLS_PP_Action_Settings").RefersToRange.Cells(1, 1) = RID_RESXLS_PP_Action_Settings
+ aWorkBook.Names("RID_RESXLS_PP_Application").RefersToRange.Cells(1, 1) = RID_RESXLS_PP_Application
+ aWorkBook.Names("RID_RESXLS_PP_Content___Document_Properties").RefersToRange.Cells(1, 1) = RID_RESXLS_PP_Content___Document_Properties
+ aWorkBook.Names("RID_RESXLS_PP_Document_Name_and_Path").RefersToRange.Cells(1, 1) = RID_RESXLS_PP_Document_Name_and_Path
+ aWorkBook.Names("RID_RESXLS_PP_Fields").RefersToRange.Cells(1, 1) = RID_RESXLS_PP_Fields
+ aWorkBook.Names("RID_RESXLS_PP_Format").RefersToRange.Cells(1, 1) = RID_RESXLS_PP_Format
+ aWorkBook.Names("RID_RESXLS_PP_Notes___Handouts").RefersToRange.Cells(1, 1) = RID_RESXLS_PP_Notes___Handouts
+ aWorkBook.Names("RID_RESXLS_PP_Objects__Graphics___Textboxes").RefersToRange.Cells(1, 1) = RID_RESXLS_PP_Objects__Graphics___Textboxes
+ aWorkBook.Names("RID_RESXLS_PP_Portability").RefersToRange.Cells(1, 1) = RID_RESXLS_PP_Portability
+ aWorkBook.Names("RID_RESXLS_PP_PowerPoint_Documents_with_Issues___Issue_Summary").RefersToRange.Cells(1, 1) = RID_RESXLS_PP_PowerPoint_Documents_with_Issues___Issue_Summary
+ aWorkBook.Names("RID_RESXLS_PP_PowerPoint_Presentation_Name").RefersToRange.Cells(1, 1) = RID_RESXLS_PP_PowerPoint_Presentation_Name
+ aWorkBook.Names("RID_RESXLS_PP_VBA_Macros").RefersToRange.Cells(1, 1) = RID_RESXLS_PP_VBA_Macros
+ aWorkBook.Names("RID_RESXLS_RD_All_Documents_with_Macros___Reference_Details").RefersToRange.Cells(1, 1) = RID_RESXLS_RD_All_Documents_with_Macros___Reference_Details
+ aWorkBook.Names("RID_RESXLS_RD_Application").RefersToRange.Cells(1, 1) = RID_RESXLS_RD_Application
+ aWorkBook.Names("RID_RESXLS_RD_Description").RefersToRange.Cells(1, 1) = RID_RESXLS_RD_Description
+ aWorkBook.Names("RID_RESXLS_RD_Document_Name").RefersToRange.Cells(1, 1) = RID_RESXLS_RD_Document_Name
+ aWorkBook.Names("RID_RESXLS_RD_Document_Name_and_Path").RefersToRange.Cells(1, 1) = RID_RESXLS_RD_Document_Name_and_Path
+ aWorkBook.Names("RID_RESXLS_RD_Location").RefersToRange.Cells(1, 1) = RID_RESXLS_RD_Location
+ aWorkBook.Names("RID_RESXLS_RD_Reference").RefersToRange.Cells(1, 1) = RID_RESXLS_RD_Reference
+ aWorkBook.Names("RID_RESXLS_RD_Reference_Details").RefersToRange.Cells(1, 1) = RID_RESXLS_RD_Reference_Details
+ aWorkBook.Names("RID_RESXLS_WI_Application").RefersToRange.Cells(1, 1) = RID_RESXLS_WI_Application
+ aWorkBook.Names("RID_RESXLS_WI_Changes_and_Reviewing").RefersToRange.Cells(1, 1) = RID_RESXLS_WI_Changes_and_Reviewing
+ aWorkBook.Names("RID_RESXLS_WI_Content___Document_Properties").RefersToRange.Cells(1, 1) = RID_RESXLS_WI_Content___Document_Properties
+ aWorkBook.Names("RID_RESXLS_WI_Controls").RefersToRange.Cells(1, 1) = RID_RESXLS_WI_Controls
+ aWorkBook.Names("RID_RESXLS_WI_Document_Name_and_Path").RefersToRange.Cells(1, 1) = RID_RESXLS_WI_Document_Name_and_Path
+ aWorkBook.Names("RID_RESXLS_WI_Fields").RefersToRange.Cells(1, 1) = RID_RESXLS_WI_Fields
+ aWorkBook.Names("RID_RESXLS_WI_Format").RefersToRange.Cells(1, 1) = RID_RESXLS_WI_Format
+ aWorkBook.Names("RID_RESXLS_WI_Index_and_References").RefersToRange.Cells(1, 1) = RID_RESXLS_WI_Index_and_References
+ aWorkBook.Names("RID_RESXLS_WI_Objects__Graphics____Frames").RefersToRange.Cells(1, 1) = RID_RESXLS_WI_Objects__Graphics____Frames
+ aWorkBook.Names("RID_RESXLS_WI_Portability").RefersToRange.Cells(1, 1) = RID_RESXLS_WI_Portability
+ aWorkBook.Names("RID_RESXLS_WI_Tables").RefersToRange.Cells(1, 1) = RID_RESXLS_WI_Tables
+ aWorkBook.Names("RID_RESXLS_WI_VBA_Macros").RefersToRange.Cells(1, 1) = RID_RESXLS_WI_VBA_Macros
+ aWorkBook.Names("RID_RESXLS_WI_Word_Document_Name").RefersToRange.Cells(1, 1) = RID_RESXLS_WI_Word_Document_Name
+ aWorkBook.Names("RID_RESXLS_WI_Word_Documents_with_Issues___Issue_Summary").RefersToRange.Cells(1, 1) = RID_RESXLS_WI_Word_Documents_with_Issues___Issue_Summary
+ aWorkBook.Names("RID_RESXLS_XL_Application").RefersToRange.Cells(1, 1) = RID_RESXLS_XL_Application
+ aWorkBook.Names("RID_RESXLS_XL_Changes___Reviewing").RefersToRange.Cells(1, 1) = RID_RESXLS_XL_Changes___Reviewing
+ aWorkBook.Names("RID_RESXLS_XL_Charts___Tables").RefersToRange.Cells(1, 1) = RID_RESXLS_XL_Charts___Tables
+ aWorkBook.Names("RID_RESXLS_XL_Excel_Documents_with_Issues___Issue_Summary").RefersToRange.Cells(1, 1) = RID_RESXLS_XL_Excel_Documents_with_Issues___Issue_Summary
+ aWorkBook.Names("RID_RESXLS_XL_Excel_Spreadsheet_Name").RefersToRange.Cells(1, 1) = RID_RESXLS_XL_Excel_Spreadsheet_Name
+ aWorkBook.Names("RID_RESXLS_XL_Format").RefersToRange.Cells(1, 1) = RID_RESXLS_XL_Format
+ aWorkBook.Names("RID_RESXLS_XL_Functions").RefersToRange.Cells(1, 1) = RID_RESXLS_XL_Functions
+ aWorkBook.Names("RID_RESXLS_XL_Objects___Graphics").RefersToRange.Cells(1, 1) = RID_RESXLS_XL_Objects___Graphics
+
+ aWorkBook.Names("RID_RESXLS_COST_DB_Query").RefersToRange.Cells(1, 1) = RID_RESXLS_COST_DB_Query
+ aWorkBook.Names("RID_RESXLS_COST_DB_Query_Comment").RefersToRange.Cells(1, 1) = RID_RESXLS_COST_DB_Query_Comment
+ aWorkBook.Names("RID_RESXLS_COST_LineStyle").RefersToRange.Cells(1, 1) = RID_RESXLS_COST_LineStyle
+ aWorkBook.Names("RID_RESXLS_COST_LineStyle_Comment").RefersToRange.Cells(1, 1) = RID_RESXLS_COST_LineStyle_Comment
+ aWorkBook.Names("RID_RESXLS_COST_Numbering").RefersToRange.Cells(1, 1) = RID_RESXLS_COST_Numbering
+ aWorkBook.Names("RID_RESXLS_COST_Numbering_Comment").RefersToRange.Cells(1, 1) = RID_RESXLS_COST_Numbering_Comment
+ aWorkBook.Names("RID_RESXLS_COST_Template").RefersToRange.Cells(1, 1) = RID_RESXLS_COST_Template
+ aWorkBook.Names("RID_RESXLS_COST_Template_Comment").RefersToRange.Cells(1, 1) = RID_RESXLS_COST_Template_Comment
+ aWorkBook.Names("RID_RESXLS_COST_DATEDIF_Note").RefersToRange.Cells(1, 1) = RID_RESXLS_COST_DATEDIF_Note
+ aWorkBook.Names("RID_RESXLS_COST_Tabstop").RefersToRange.Cells(1, 1) = RID_RESXLS_COST_Tabstop
+ aWorkBook.Names("RID_RESXLS_COST_Tabstop_Comment").RefersToRange.Cells(1, 1) = RID_RESXLS_COST_Tabstop_Comment
+ aWorkBook.Names("RID_RESXLS_COST_GradientStyle").RefersToRange.Cells(1, 1) = RID_RESXLS_COST_GradientStyle
+ aWorkBook.Names("RID_RESXLS_COST_GradientStyle_Comment").RefersToRange.Cells(1, 1) = RID_RESXLS_COST_GradientStyle_Comment
+ aWorkBook.Names("RID_RESXLS_COST_GradientStyle_Note").RefersToRange.Cells(1, 1) = RID_RESXLS_COST_GradientStyle_Note
+ aWorkBook.Names("RID_RESXLS_COST_Hyperlink").RefersToRange.Cells(1, 1) = RID_RESXLS_COST_Hyperlink
+ aWorkBook.Names("RID_RESXLS_COST_Hyperlink_Comment").RefersToRange.Cells(1, 1) = RID_RESXLS_COST_Hyperlink_Comment
+ aWorkBook.Names("RID_RESXLS_COST_HyperlinkSplit").RefersToRange.Cells(1, 1) = RID_RESXLS_COST_HyperlinkSplit
+ aWorkBook.Names("RID_RESXLS_COST_HyperlinkSplit_Comment").RefersToRange.Cells(1, 1) = RID_RESXLS_COST_HyperlinkSplit_Comment
+ aWorkBook.Names("RID_RESXLS_COST_Background").RefersToRange.Cells(1, 1) = RID_RESXLS_COST_Background
+ aWorkBook.Names("RID_RESXLS_COST_Background_Comment").RefersToRange.Cells(1, 1) = RID_RESXLS_COST_Background_Comment
+ aWorkBook.Names("RID_RESXLS_COST_Transparent").RefersToRange.Cells(1, 1) = RID_RESXLS_COST_Transparent
+ aWorkBook.Names("RID_RESXLS_COST_Transparent_Comment").RefersToRange.Cells(1, 1) = RID_RESXLS_COST_Transparent_Comment
+
+End Sub
diff --git a/migrationanalysis/src/driver_docs/sources/PrepareInfo.cls b/migrationanalysis/src/driver_docs/sources/PrepareInfo.cls
new file mode 100644
index 000000000000..71eacb640562
--- /dev/null
+++ b/migrationanalysis/src/driver_docs/sources/PrepareInfo.cls
@@ -0,0 +1,44 @@
+VERSION 1.0 CLASS
+BEGIN
+ MultiUse = -1 'True
+END
+Attribute VB_Name = "PrepareInfo"
+Attribute VB_GlobalNameSpace = False
+Attribute VB_Creatable = False
+Attribute VB_PredeclaredId = False
+Attribute VB_Exposed = True
+'/*************************************************************************
+' *
+' * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+' *
+' * Copyright 2008 by Sun Microsystems, Inc.
+' *
+' * OpenOffice.org - a multi-platform office productivity suite
+' *
+' * $RCSfile: PrepareInfo.cls,v $
+' *
+' * This file is part of OpenOffice.org.
+' *
+' * OpenOffice.org is free software: you can redistribute it and/or modify
+' * it under the terms of the GNU Lesser General Public License version 3
+' * only, as published by the Free Software Foundation.
+' *
+' * OpenOffice.org is distributed in the hope that it will be useful,
+' * but WITHOUT ANY WARRANTY; without even the implied warranty of
+' * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+' * GNU Lesser General Public License version 3 for more details
+' * (a copy is included in the LICENSE file that accompanied this code).
+' *
+' * You should have received a copy of the GNU Lesser General Public License
+' * version 3 along with OpenOffice.org. If not, see
+' * <http://www.openoffice.org/license.html>
+' * for a copy of the LGPLv3 License.
+' *
+' ************************************************************************/
+
+'H&F Info
+Public HF_OnPage As Long
+Public HF_inheader As Boolean
+Public HF_extendLength As Single
+Public HF_Shapes As Collection
+Public HF_Frames As Collection
diff --git a/migrationanalysis/src/driver_docs/sources/StringDataManager.cls b/migrationanalysis/src/driver_docs/sources/StringDataManager.cls
new file mode 100644
index 000000000000..6bea8530bf95
--- /dev/null
+++ b/migrationanalysis/src/driver_docs/sources/StringDataManager.cls
@@ -0,0 +1,133 @@
+VERSION 1.0 CLASS
+BEGIN
+ MultiUse = -1 'True
+END
+Attribute VB_Name = "StringDataManager"
+Attribute VB_GlobalNameSpace = False
+Attribute VB_Creatable = False
+Attribute VB_PredeclaredId = False
+Attribute VB_Exposed = True
+'/*************************************************************************
+' *
+' * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+' *
+' * Copyright 2008 by Sun Microsystems, Inc.
+' *
+' * OpenOffice.org - a multi-platform office productivity suite
+' *
+' * $RCSfile: StringDataManager.cls,v $
+' *
+' * This file is part of OpenOffice.org.
+' *
+' * OpenOffice.org is free software: you can redistribute it and/or modify
+' * it under the terms of the GNU Lesser General Public License version 3
+' * only, as published by the Free Software Foundation.
+' *
+' * OpenOffice.org is distributed in the hope that it will be useful,
+' * but WITHOUT ANY WARRANTY; without even the implied warranty of
+' * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+' * GNU Lesser General Public License version 3 for more details
+' * (a copy is included in the LICENSE file that accompanied this code).
+' *
+' * You should have received a copy of the GNU Lesser General Public License
+' * version 3 along with OpenOffice.org. If not, see
+' * <http://www.openoffice.org/license.html>
+' * for a copy of the LGPLv3 License.
+' *
+' ************************************************************************/
+
+Option Explicit
+Private langDict As Scripting.Dictionary
+Private mFileName As String
+
+Const C_PRODUCTNAME = "<PRODUCTNAME>"
+Const C_PRODUCTVERSION = "<PRODUCTVERSION>"
+Const C_NEXTPRODUCTVERSION = "<NEXTPRODUCTVERSION>"
+Const C_NEWLINE = "<CR>"
+
+' Load strings from the data file (in the form "id=string") into
+' dictionary object.
+Function InitStringData(fileName As String) As Boolean
+ On Error GoTo HandleErrors
+ Dim stringFile As TextStream
+ Dim aLine As String
+ Dim valueOffset As Long
+ Dim id, Str As String
+ Dim fso As FileSystemObject
+
+ 'Make sure the string data file exists before opening.
+ Set fso = New Scripting.FileSystemObject
+ If Not fso.FileExists(fileName) Then
+ InitStringData = False
+ Exit Function
+ End If
+ Set stringFile = fso.OpenTextFile(fileName, ForReading, False, TristateTrue)
+ If IsEmpty(stringFile) Then
+ 'WriteDebug
+ End If
+ mFileName = fileName
+
+ 'Read each line and parse the id and string, then put into dictionary
+ Do While Not stringFile.AtEndOfStream
+ aLine = stringFile.ReadLine
+ valueOffset = InStr(aLine, "=")
+ id = Left(aLine, valueOffset - 1)
+ Str = Right(aLine, Len(aLine) - valueOffset)
+ langDict.Add id, Str
+ Loop
+ stringFile.Close
+
+ Dim aProductName As String
+ Dim aProductVersion As String
+ Dim aNextProductVersion As String
+ Dim aKey As Variant
+ Dim aItem As String
+ Dim aOldItem As String
+
+ aProductName = langDict.item("RID_STR_COMMON_PRODUCTNAME")
+ aProductVersion = langDict.item("RID_STR_COMMON_PRODUCTVERSION")
+ aNextProductVersion = langDict.item("RID_STR_COMMON_NEXTPRODUCTVERSION")
+
+ For Each aKey In langDict
+ aOldItem = langDict.item(aKey)
+ aItem = ReplaceTopicTokens(aOldItem, C_PRODUCTNAME, aProductName)
+ aItem = ReplaceTopicTokens(aItem, C_PRODUCTVERSION, aProductVersion)
+ aItem = ReplaceTopicTokens(aItem, C_NEXTPRODUCTVERSION, aNextProductVersion)
+ aItem = ReplaceTopicTokens(aItem, C_NEWLINE, vbLF)
+ If (Not (aOldItem = aItem)) Then
+ langDict.item(aKey) = aItem
+ End If
+ Next
+
+ InitStringData = True
+
+FinalExit:
+ Exit Function
+HandleErrors:
+ WriteDebug "InitStringData : " & Err.Number & " " & Err.Description & " " & Err.Source
+ InitStringData = False
+End Function
+
+'Set String Data from an existing dictionary
+Public Property Set StringData(data As Scripting.Dictionary)
+ Set langDict = data
+End Property
+
+'Get String Data dictionary
+Public Property Get StringData() As Scripting.Dictionary
+ Set StringData = langDict
+End Property
+
+'Initialize a given string variable by id
+Function InitString(ByRef resRef As String, resName As String)
+ resRef = langDict.item(resName)
+End Function
+
+Private Sub Class_Initialize()
+ Set langDict = New Scripting.Dictionary 'Allocate the string dictonary
+End Sub
+
+Private Sub Class_Terminate()
+ langDict.RemoveAll
+ Set langDict = Nothing 'Empty the dictionary and remove the instance
+End Sub
diff --git a/migrationanalysis/src/driver_docs/sources/Stripped_OOoDocAnalysisExcelDriver.xls b/migrationanalysis/src/driver_docs/sources/Stripped_OOoDocAnalysisExcelDriver.xls
new file mode 100644
index 000000000000..8b749cf29ec3
--- /dev/null
+++ b/migrationanalysis/src/driver_docs/sources/Stripped_OOoDocAnalysisExcelDriver.xls
Binary files differ
diff --git a/migrationanalysis/src/driver_docs/sources/Stripped_OOoDocAnalysisPPTDriver.ppt b/migrationanalysis/src/driver_docs/sources/Stripped_OOoDocAnalysisPPTDriver.ppt
new file mode 100644
index 000000000000..005f9030efbc
--- /dev/null
+++ b/migrationanalysis/src/driver_docs/sources/Stripped_OOoDocAnalysisPPTDriver.ppt
Binary files differ
diff --git a/migrationanalysis/src/driver_docs/sources/Stripped_OOoDocAnalysisWordDriver.doc b/migrationanalysis/src/driver_docs/sources/Stripped_OOoDocAnalysisWordDriver.doc
new file mode 100644
index 000000000000..8ec7afdd4d71
--- /dev/null
+++ b/migrationanalysis/src/driver_docs/sources/Stripped_OOoDocAnalysisWordDriver.doc
Binary files differ
diff --git a/migrationanalysis/src/driver_docs/sources/common_res.bas b/migrationanalysis/src/driver_docs/sources/common_res.bas
new file mode 100644
index 000000000000..5a3a048261d0
--- /dev/null
+++ b/migrationanalysis/src/driver_docs/sources/common_res.bas
@@ -0,0 +1,286 @@
+Attribute VB_Name = "common_res"
+'/*************************************************************************
+' *
+' * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+' *
+' * Copyright 2008 by Sun Microsystems, Inc.
+' *
+' * OpenOffice.org - a multi-platform office productivity suite
+' *
+' * $RCSfile: common_res.bas,v $
+' *
+' * This file is part of OpenOffice.org.
+' *
+' * OpenOffice.org is free software: you can redistribute it and/or modify
+' * it under the terms of the GNU Lesser General Public License version 3
+' * only, as published by the Free Software Foundation.
+' *
+' * OpenOffice.org is distributed in the hope that it will be useful,
+' * but WITHOUT ANY WARRANTY; without even the implied warranty of
+' * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+' * GNU Lesser General Public License version 3 for more details
+' * (a copy is included in the LICENSE file that accompanied this code).
+' *
+' * You should have received a copy of the GNU Lesser General Public License
+' * version 3 along with OpenOffice.org. If not, see
+' * <http://www.openoffice.org/license.html>
+' * for a copy of the LGPLv3 License.
+' *
+' ************************************************************************/
+
+Public RID_STR_COMMON_RESULTS_SHEET_NAME_OVERVIEW As String
+Public RID_STR_COMMON_RESULTS_SHEET_NAME_COSTS As String
+Public RID_STR_COMMON_RESULTS_SHEET_NAME_DOCISSUES_WORD As String
+Public RID_STR_COMMON_RESULTS_SHEET_NAME_DOCISSUES_EXCEL As String
+Public RID_STR_COMMON_RESULTS_SHEET_NAME_DOCISSUES_POWERPOINT As String
+Public RID_STR_COMMON_RESULTS_SHEET_NAME_DOCISSUE_DETAILS As String
+Public RID_STR_COMMON_RESULTS_SHEET_NAME_DOCREF_DETAILS As String
+Public RID_STR_COMMON_RESULTS_SHEET_NAME_DOCPROP As String
+Public RID_STR_COMMON_ANALYSIS_STR As String
+Public RID_STR_COMMON_NOTE_PRE As String
+Public RID_STR_COMMON_NOTE_POST As String
+Public RID_STR_COMMON_OLE_EMBEDDED As String
+Public RID_STR_COMMON_OLE_LINKED As String
+Public RID_STR_COMMON_OLE_CONTROL As String
+Public RID_STR_COMMON_OLE_FIELD_LINK As String
+Public RID_STR_COMMON_OLE_UNKNOWN As String
+Public RID_STR_COMMON_VB_COMPONENT_MODULE As String
+Public RID_STR_COMMON_VB_COMPONENT_STANDARD As String
+Public RID_STR_COMMON_VB_COMPONENT_CLASS As String
+Public RID_STR_COMMON_VB_COMPONENT_USER_FORM As String
+Public RID_STR_COMMON_VB_COMPONENT_DOCUMENT As String
+Public RID_STR_COMMON_VB_COMPONENT_ACTIVEX_DESIGNER As String
+Public RID_STR_COMMON_VB_COMPONENT_UNKNOWN As String
+Public RID_STR_COMMON_YES_OR_NO As String
+Public RID_STR_COMMON_DATE As String
+Public RID_STR_COMMON_NUMBER As String
+Public RID_STR_COMMON_TEXT As String
+Public RID_STR_COMMON_UNKNOWN As String
+Public RID_STR_COMMON_DEC_TO_EXTERNAL_LIBRARY As String
+Public RID_STR_COMMON_RESULTS_LOCATION_TYPE_DOCUMENT As String
+Public RID_STR_COMMON_RESULTS_LOCATION_TYPE_PAGE As String
+Public RID_STR_COMMON_RESULTS_LOCATION_TYPE_WORKBOOK As String
+Public RID_STR_COMMON_RESULTS_LOCATION_TYPE_SHEET As String
+Public RID_STR_COMMON_RESULTS_LOCATION_TYPE_PRESENTATION As String
+Public RID_STR_COMMON_RESULTS_LOCATION_TYPE_SLIDE As String
+Public RID_STR_COMMON_INVALID_PASSWORD As String
+Public RID_STR_COMMON_PASSWORD_SKIPDOC As String
+Public RID_STR_COMMON_NA As String
+Public RID_STR_COMMON_ATTRIBUTE_BROKEN As String
+Public RID_STR_COMMON_ATTRIBUTE_BUILTIN As String
+Public RID_STR_COMMON_ATTRIBUTE_CHECK_DOCUMENT_REFERENCES As String
+Public RID_STR_COMMON_ATTRIBUTE_CLASS_ME_COUNT As String
+Public RID_STR_COMMON_ATTRIBUTE_COMPONENT As String
+Public RID_STR_COMMON_ATTRIBUTE_CONTROLS As String
+Public RID_STR_COMMON_ATTRIBUTE_CUSTOM As String
+Public RID_STR_COMMON_ATTRIBUTE_DESCRIPTION As String
+Public RID_STR_COMMON_ATTRIBUTE_GUID As String
+Public RID_STR_COMMON_ATTRIBUTE_FILE As String
+Public RID_STR_COMMON_ATTRIBUTE_PROPERTIES As String
+Public RID_STR_COMMON_ATTRIBUTE_FURTHER_MACRO_ANALYSIS_NOT_POSSIBLE As String
+Public RID_STR_COMMON_ATTRIBUTE_INCLUDING As String
+Public RID_STR_COMMON_ATTRIBUTE_INTACT As String
+Public RID_STR_COMMON_ATTRIBUTE_ISBROKEN As String
+Public RID_STR_COMMON_ATTRIBUTE_MAJOR As String
+Public RID_STR_COMMON_ATTRIBUTE_MINOR As String
+Public RID_STR_COMMON_ATTRIBUTE_MISSING As String
+Public RID_STR_COMMON_ATTRIBUTE_NAME As String
+Public RID_STR_COMMON_ATTRIBUTE_NON_PORTABLE_EXTERNAL_REFERENCES As String
+Public RID_STR_COMMON_ATTRIBUTE_NON_PORTABLE_EXTERNAL_REFERENCES_COUNT As String
+Public RID_STR_COMMON_ATTRIBUTE_NUMBER_OF_LINES As String
+Public RID_STR_COMMON_ATTRIBUTE_SIGNATURE As String
+Public RID_STR_COMMON_ATTRIBUTE_PASSWORD As String
+Public RID_STR_COMMON_ATTRIBUTE_PATH As String
+Public RID_STR_COMMON_ATTRIBUTE_PROCEDURES As String
+Public RID_STR_COMMON_ATTRIBUTE_PROJECT As String
+Public RID_STR_COMMON_ATTRIBUTE_TYPE As String
+Public RID_STR_COMMON_ATTRIBUTE_TYPELIB As String
+Public RID_STR_COMMON_ATTRIBUTE_UNABLE_TO_ACCESS_VBPROJECT As String
+Public RID_STR_COMMON_ATTRIBUTE_UNKNOWN As String
+Public RID_STR_COMMON_ATTRIBUTE_USERFORM_TYPE As String
+Public RID_STR_COMMON_ATTRIBUTE_USERFORM_TYPES_COUNT As String
+Public RID_STR_COMMON_ATTRIBUTE_VALUE As String
+Public RID_STR_COMMON_ATTRIBUTE_VBPROJECT_PASSWORD As String
+Public RID_STR_COMMON_ISSUE_INFORMATION As String
+Public RID_STR_COMMON_ISSUE_FORMAT As String
+Public RID_STR_COMMON_ISSUE_PORTABILITY As String
+Public RID_STR_COMMON_ISSUE_VBA_MACROS As String
+Public RID_STR_COMMON_ISSUE_CONTENT_AND_DOCUMENT_PROPERTIES As String
+Public RID_STR_COMMON_NOTE_DOCUMENT_PROPERTIES_LOST As String
+Public RID_STR_COMMON_SUBISSUE_PROPERTIES As String
+Public RID_STR_COMMON_SUBISSUE_REFERENCES As String
+Public RID_STR_COMMON_SUBISSUE_EXTERNAL_REFERENCES_IN_MACROS As String
+Public RID_STR_COMMON_SUBISSUE_INVALID_PASSWORD_ENTERED As String
+Public RID_STR_COMMON_SUBISSUE_SKIP_PASSWORD_DOCUMENTS As String
+Public RID_STR_COMMON_SUBISSUE_DOCUMENT_PARTS_PROTECTION As String
+Public RID_STR_COMMON_SUBISSUE_MACRO_PASSWORD_PROTECTION As String
+Public RID_STR_COMMON_SUBISSUE_PASSWORDS_PROTECTION As String
+Public RID_STR_COMMON_ATTRIBUTE_OBJECT_NAME As String
+Public RID_STR_COMMON_ATTRIBUTE_OBJECT_TYPE As String
+Public RID_STR_COMMON_ATTRIBUTE_SOURCE As String
+Public RID_STR_COMMON_NOTE_HF_PREPARABLE As String
+Public RID_STR_COMMON_PREPARATION_FOLDER As String
+Public RID_STR_COMMON_SUBISSUE_DOCUMENT_CUSTOM_PROPERTY As String
+Public RID_STR_COMMON_MACRO_CLASS_COMPLEX As String
+Public RID_STR_COMMON_MACRO_CLASS_MEDIUM As String
+Public RID_STR_COMMON_MACRO_CLASS_SIMPLE As String
+Public RID_STR_COMMON_MACRO_CLASS_NONE As String
+Public RID_STR_COMMON_ISSUE_CLASS_COMPLEX As String
+Public RID_STR_COMMON_ISSUE_CLASS_MINOR As String
+Public RID_STR_COMMON_ISSUE_CLASS_NONE As String
+Public RID_STR_COMMON_OV_VERSION_STR As String
+Public RID_STR_COMMON_OV_PRODUCT_STR As String
+Public RID_STR_COMMON_OV_DOC_MOD_DATES_COMMENT_TITLE As String
+Public RID_STR_COMMON_OV_DOC_MOD_DATES_COMMENT_BODY As String
+Public RID_STR_COMMON_OV_LEGEND_TITLE As String
+Public RID_STR_COMMON_OV_DOC_MOD_DATES_LEGEND_BODY As String
+Public RID_STR_COMMON_OV_DOC_MACRO_COMMENT_TITLE As String
+Public RID_STR_COMMON_OV_DOC_MACRO_COMMENT_BODY As String
+Public RID_STR_COMMON_OV_DOC_MACRO_LEGEND_BODY As String
+Public RID_STR_COMMON_OV_HIGH_LEVEL_ANALYSIS_DAW As String
+Public RID_STR_COMMON_OV_HIGH_LEVEL_ANALYSIS_PAW_NO_LIMIT As String
+Public RID_STR_COMMON_OV_DOC_ANALYSIS_COMMENT_TITLE As String
+Public RID_STR_COMMON_OV_DOC_ANALYSIS_COMMENT_BODY As String
+Public RID_STR_COMMON_OV_DOC_ANALYSIS_DAW_LEGEND_BODY As String
+Public RID_STR_COMMON_OV_DOC_ANALYSIS_PAW_LEGEND_BODY As String
+Public RID_STR_COMMON_OV_DOC_MOD_DATES_CHART_TITLE As String
+Public RID_STR_COMMON_OV_DOC_MACRO_CHART_TITLE As String
+Public RID_STR_COMMON_OV_DOC_ANALYSIS_CHART_TITLE As String
+Public RID_STR_COMMON_PREPARATION_NOTE As String
+Public RID_STR_COMMON_CANNOT_OPEN As String
+Public RID_STR_COMMON_SUBISSUE_LINE_NOTE As String
+Public RID_STR_COMMON_SUBISSUE_TRANSPARENCY_NOTE As String
+Public RID_STR_COMMON_SUBISSUE_GRADIENT_PRESET_NOTE As String
+Public RID_STR_COMMON_SUBISSUE_GRADIENT_CORNER_NOTE As String
+Public RID_STR_COMMON_SUBISSUE_GRADIENT_CENTER_NOTE As String
+
+Public Sub LoadCommonStrings(sdm As StringDataManager)
+ sdm.InitString RID_STR_COMMON_RESULTS_SHEET_NAME_OVERVIEW, "RID_STR_COMMON_RESULTS_SHEET_NAME_OVERVIEW"
+ ' The dutch excel 2000 doesn't like the name 'Overzicht' so we always append a space to the name
+ RID_STR_COMMON_RESULTS_SHEET_NAME_OVERVIEW = RID_STR_COMMON_RESULTS_SHEET_NAME_OVERVIEW & " "
+ sdm.InitString RID_STR_COMMON_RESULTS_SHEET_NAME_COSTS, "RID_STR_COMMON_RESULTS_SHEET_NAME_COSTS"
+ sdm.InitString RID_STR_COMMON_RESULTS_SHEET_NAME_DOCISSUES_WORD, "RID_STR_COMMON_RESULTS_SHEET_NAME_DOCISSUES_WORD"
+ sdm.InitString RID_STR_COMMON_RESULTS_SHEET_NAME_DOCISSUES_EXCEL, "RID_STR_COMMON_RESULTS_SHEET_NAME_DOCISSUES_EXCEL"
+ sdm.InitString RID_STR_COMMON_RESULTS_SHEET_NAME_DOCISSUES_POWERPOINT, "RID_STR_COMMON_RESULTS_SHEET_NAME_DOCISSUES_POWERPOINT"
+ sdm.InitString RID_STR_COMMON_RESULTS_SHEET_NAME_DOCISSUE_DETAILS, "RID_STR_COMMON_RESULTS_SHEET_NAME_DOCISSUE_DETAILS"
+ sdm.InitString RID_STR_COMMON_RESULTS_SHEET_NAME_DOCREF_DETAILS, "RID_STR_COMMON_RESULTS_SHEET_NAME_DOCREF_DETAILS"
+ sdm.InitString RID_STR_COMMON_RESULTS_SHEET_NAME_DOCPROP, "RID_STR_COMMON_RESULTS_SHEET_NAME_DOCPROP"
+ sdm.InitString RID_STR_COMMON_ANALYSIS_STR, "RID_STR_COMMON_ANALYSIS_STR"
+ sdm.InitString RID_STR_COMMON_NOTE_PRE, "RID_STR_COMMON_NOTE_PRE"
+ sdm.InitString RID_STR_COMMON_NOTE_POST, "RID_STR_COMMON_NOTE_POST"
+ sdm.InitString RID_STR_COMMON_OLE_EMBEDDED, "RID_STR_COMMON_OLE_EMBEDDED"
+ sdm.InitString RID_STR_COMMON_OLE_LINKED, "RID_STR_COMMON_OLE_LINKED"
+ sdm.InitString RID_STR_COMMON_OLE_CONTROL, "RID_STR_COMMON_OLE_CONTROL"
+ sdm.InitString RID_STR_COMMON_OLE_FIELD_LINK, "RID_STR_COMMON_OLE_FIELD_LINK"
+ sdm.InitString RID_STR_COMMON_OLE_UNKNOWN, "RID_STR_COMMON_OLE_UNKNOWN"
+ sdm.InitString RID_STR_COMMON_VB_COMPONENT_MODULE, "RID_STR_COMMON_VB_COMPONENT_MODULE"
+ sdm.InitString RID_STR_COMMON_VB_COMPONENT_STANDARD, "RID_STR_COMMON_VB_COMPONENT_STANDARD"
+ sdm.InitString RID_STR_COMMON_VB_COMPONENT_CLASS, "RID_STR_COMMON_VB_COMPONENT_CLASS"
+ sdm.InitString RID_STR_COMMON_VB_COMPONENT_USER_FORM, "RID_STR_COMMON_VB_COMPONENT_USER_FORM"
+ sdm.InitString RID_STR_COMMON_VB_COMPONENT_DOCUMENT, "RID_STR_COMMON_VB_COMPONENT_DOCUMENT"
+ sdm.InitString RID_STR_COMMON_VB_COMPONENT_ACTIVEX_DESIGNER, "RID_STR_COMMON_VB_COMPONENT_ACTIVEX_DESIGNER"
+ sdm.InitString RID_STR_COMMON_VB_COMPONENT_UNKNOWN, "RID_STR_COMMON_VB_COMPONENT_UNKNOWN"
+ sdm.InitString RID_STR_COMMON_YES_OR_NO, "RID_STR_COMMON_YES_OR_NO"
+ sdm.InitString RID_STR_COMMON_DATE, "RID_STR_COMMON_DATE"
+ sdm.InitString RID_STR_COMMON_NUMBER, "RID_STR_COMMON_NUMBER"
+ sdm.InitString RID_STR_COMMON_TEXT, "RID_STR_COMMON_TEXT"
+ sdm.InitString RID_STR_COMMON_UNKNOWN, "RID_STR_COMMON_UNKNOWN"
+ sdm.InitString RID_STR_COMMON_DEC_TO_EXTERNAL_LIBRARY, "RID_STR_COMMON_DEC_TO_EXTERNAL_LIBRARY"
+ sdm.InitString RID_STR_COMMON_RESULTS_LOCATION_TYPE_DOCUMENT, "RID_STR_COMMON_RESULTS_LOCATION_TYPE_DOCUMENT"
+ sdm.InitString RID_STR_COMMON_RESULTS_LOCATION_TYPE_PAGE, "RID_STR_COMMON_RESULTS_LOCATION_TYPE_PAGE"
+ sdm.InitString RID_STR_COMMON_RESULTS_LOCATION_TYPE_WORKBOOK, "RID_STR_COMMON_RESULTS_LOCATION_TYPE_WORKBOOK"
+ sdm.InitString RID_STR_COMMON_RESULTS_LOCATION_TYPE_SHEET, "RID_STR_COMMON_RESULTS_LOCATION_TYPE_SHEET"
+ sdm.InitString RID_STR_COMMON_RESULTS_LOCATION_TYPE_PRESENTATION, "RID_STR_COMMON_RESULTS_LOCATION_TYPE_PRESENTATION"
+ sdm.InitString RID_STR_COMMON_RESULTS_LOCATION_TYPE_SLIDE, "RID_STR_COMMON_RESULTS_LOCATION_TYPE_SLIDE"
+ sdm.InitString RID_STR_COMMON_INVALID_PASSWORD, "RID_STR_COMMON_INVALID_PASSWORD"
+ sdm.InitString RID_STR_COMMON_PASSWORD_SKIPDOC, "RID_STR_COMMON_PASSWORD_SKIPDOC"
+ sdm.InitString RID_STR_COMMON_NA, "RID_STR_COMMON_NA"
+ sdm.InitString RID_STR_COMMON_ATTRIBUTE_BROKEN, "RID_STR_COMMON_ATTRIBUTE_BROKEN"
+ sdm.InitString RID_STR_COMMON_ATTRIBUTE_BUILTIN, "RID_STR_COMMON_ATTRIBUTE_BUILTIN"
+ sdm.InitString RID_STR_COMMON_ATTRIBUTE_CHECK_DOCUMENT_REFERENCES, "RID_STR_COMMON_ATTRIBUTE_CHECK_DOCUMENT_REFERENCES"
+ sdm.InitString RID_STR_COMMON_ATTRIBUTE_CLASS_ME_COUNT, "RID_STR_COMMON_ATTRIBUTE_CLASS_ME_COUNT"
+ sdm.InitString RID_STR_COMMON_ATTRIBUTE_COMPONENT, "RID_STR_COMMON_ATTRIBUTE_COMPONENT"
+ sdm.InitString RID_STR_COMMON_ATTRIBUTE_CONTROLS, "RID_STR_COMMON_ATTRIBUTE_CONTROLS"
+ sdm.InitString RID_STR_COMMON_ATTRIBUTE_CUSTOM, "RID_STR_COMMON_ATTRIBUTE_CUSTOM"
+ sdm.InitString RID_STR_COMMON_ATTRIBUTE_DESCRIPTION, "RID_STR_COMMON_ATTRIBUTE_DESCRIPTION"
+ sdm.InitString RID_STR_COMMON_ATTRIBUTE_GUID, "RID_STR_COMMON_ATTRIBUTE_GUID"
+ sdm.InitString RID_STR_COMMON_ATTRIBUTE_FILE, "RID_STR_COMMON_ATTRIBUTE_FILE"
+ sdm.InitString RID_STR_COMMON_ATTRIBUTE_PROPERTIES, "RID_STR_COMMON_ATTRIBUTE_PROPERTIES"
+ sdm.InitString RID_STR_COMMON_ATTRIBUTE_FURTHER_MACRO_ANALYSIS_NOT_POSSIBLE, "RID_STR_COMMON_ATTRIBUTE_FURTHER_MACRO_ANALYSIS_NOT_POSSIBLE"
+ sdm.InitString RID_STR_COMMON_ATTRIBUTE_INCLUDING, "RID_STR_COMMON_ATTRIBUTE_INCLUDING"
+ sdm.InitString RID_STR_COMMON_ATTRIBUTE_INTACT, "RID_STR_COMMON_ATTRIBUTE_INTACT"
+ sdm.InitString RID_STR_COMMON_ATTRIBUTE_ISBROKEN, "RID_STR_COMMON_ATTRIBUTE_ISBROKEN"
+ sdm.InitString RID_STR_COMMON_ATTRIBUTE_MAJOR, "RID_STR_COMMON_ATTRIBUTE_MAJOR"
+ sdm.InitString RID_STR_COMMON_ATTRIBUTE_MINOR, "RID_STR_COMMON_ATTRIBUTE_MINOR"
+ sdm.InitString RID_STR_COMMON_ATTRIBUTE_MISSING, "RID_STR_COMMON_ATTRIBUTE_MISSING"
+ sdm.InitString RID_STR_COMMON_ATTRIBUTE_NAME, "RID_STR_COMMON_ATTRIBUTE_NAME"
+ sdm.InitString RID_STR_COMMON_ATTRIBUTE_NON_PORTABLE_EXTERNAL_REFERENCES, "RID_STR_COMMON_ATTRIBUTE_NON_PORTABLE_EXTERNAL_REFERENCES"
+ sdm.InitString RID_STR_COMMON_ATTRIBUTE_NON_PORTABLE_EXTERNAL_REFERENCES_COUNT, "RID_STR_COMMON_ATTRIBUTE_NON_PORTABLE_EXTERNAL_REFERENCES_COUNT"
+ sdm.InitString RID_STR_COMMON_ATTRIBUTE_NUMBER_OF_LINES, "RID_STR_COMMON_ATTRIBUTE_NUMBER_OF_LINES"
+ sdm.InitString RID_STR_COMMON_ATTRIBUTE_SIGNATURE, "RID_STR_COMMON_ATTRIBUTE_SIGNATURE"
+ sdm.InitString RID_STR_COMMON_ATTRIBUTE_PASSWORD, "RID_STR_COMMON_ATTRIBUTE_PASSWORD"
+ sdm.InitString RID_STR_COMMON_ATTRIBUTE_PATH, "RID_STR_COMMON_ATTRIBUTE_PATH"
+ sdm.InitString RID_STR_COMMON_ATTRIBUTE_PROCEDURES, "RID_STR_COMMON_ATTRIBUTE_PROCEDURES"
+ sdm.InitString RID_STR_COMMON_ATTRIBUTE_PROJECT, "RID_STR_COMMON_ATTRIBUTE_PROJECT"
+ sdm.InitString RID_STR_COMMON_ATTRIBUTE_TYPE, "RID_STR_COMMON_ATTRIBUTE_TYPE"
+ sdm.InitString RID_STR_COMMON_ATTRIBUTE_TYPELIB, "RID_STR_COMMON_ATTRIBUTE_TYPELIB"
+ sdm.InitString RID_STR_COMMON_ATTRIBUTE_UNABLE_TO_ACCESS_VBPROJECT, "RID_STR_COMMON_ATTRIBUTE_UNABLE_TO_ACCESS_VBPROJECT"
+ sdm.InitString RID_STR_COMMON_ATTRIBUTE_UNKNOWN, "RID_STR_COMMON_ATTRIBUTE_UNKNOWN"
+ sdm.InitString RID_STR_COMMON_ATTRIBUTE_USERFORM_TYPE, "RID_STR_COMMON_ATTRIBUTE_USERFORM_TYPE"
+ sdm.InitString RID_STR_COMMON_ATTRIBUTE_USERFORM_TYPES_COUNT, "RID_STR_COMMON_ATTRIBUTE_USERFORM_TYPES_COUNT"
+ sdm.InitString RID_STR_COMMON_ATTRIBUTE_VALUE, "RID_STR_COMMON_ATTRIBUTE_VALUE"
+ sdm.InitString RID_STR_COMMON_ATTRIBUTE_VBPROJECT_PASSWORD, "RID_STR_COMMON_ATTRIBUTE_VBPROJECT_PASSWORD"
+ sdm.InitString RID_STR_COMMON_ISSUE_INFORMATION, "RID_STR_COMMON_ISSUE_INFORMATION"
+ sdm.InitString RID_STR_COMMON_ISSUE_FORMAT, "RID_STR_COMMON_ISSUE_FORMAT"
+ sdm.InitString RID_STR_COMMON_ISSUE_PORTABILITY, "RID_STR_COMMON_ISSUE_PORTABILITY"
+ sdm.InitString RID_STR_COMMON_ISSUE_VBA_MACROS, "RID_STR_COMMON_ISSUE_VBA_MACROS"
+ sdm.InitString RID_STR_COMMON_ISSUE_CONTENT_AND_DOCUMENT_PROPERTIES, "RID_STR_COMMON_ISSUE_CONTENT_AND_DOCUMENT_PROPERTIES"
+ sdm.InitString RID_STR_COMMON_NOTE_DOCUMENT_PROPERTIES_LOST, "RID_STR_COMMON_NOTE_DOCUMENT_PROPERTIES_LOST"
+ sdm.InitString RID_STR_COMMON_SUBISSUE_PROPERTIES, "RID_STR_COMMON_SUBISSUE_PROPERTIES"
+ sdm.InitString RID_STR_COMMON_SUBISSUE_REFERENCES, "RID_STR_COMMON_SUBISSUE_REFERENCES"
+ sdm.InitString RID_STR_COMMON_SUBISSUE_EXTERNAL_REFERENCES_IN_MACROS, "RID_STR_COMMON_SUBISSUE_EXTERNAL_REFERENCES_IN_MACROS"
+ sdm.InitString RID_STR_COMMON_SUBISSUE_INVALID_PASSWORD_ENTERED, "RID_STR_COMMON_SUBISSUE_INVALID_PASSWORD_ENTERED"
+ sdm.InitString RID_STR_COMMON_SUBISSUE_SKIP_PASSWORD_DOCUMENTS, "RID_STR_COMMON_SUBISSUE_SKIP_PASSWORD_DOCUMENTS"
+ sdm.InitString RID_STR_COMMON_SUBISSUE_DOCUMENT_PARTS_PROTECTION, "RID_STR_COMMON_SUBISSUE_DOCUMENT_PARTS_PROTECTION"
+ sdm.InitString RID_STR_COMMON_SUBISSUE_MACRO_PASSWORD_PROTECTION, "RID_STR_COMMON_SUBISSUE_MACRO_PASSWORD_PROTECTION"
+ sdm.InitString RID_STR_COMMON_SUBISSUE_PASSWORDS_PROTECTION, "RID_STR_COMMON_SUBISSUE_PASSWORDS_PROTECTION"
+ sdm.InitString RID_STR_COMMON_ATTRIBUTE_OBJECT_NAME, "RID_STR_COMMON_ATTRIBUTE_OBJECT_NAME"
+ sdm.InitString RID_STR_COMMON_ATTRIBUTE_OBJECT_TYPE, "RID_STR_COMMON_ATTRIBUTE_OBJECT_TYPE"
+ sdm.InitString RID_STR_COMMON_ATTRIBUTE_SOURCE, "RID_STR_COMMON_ATTRIBUTE_SOURCE"
+ sdm.InitString RID_STR_COMMON_NOTE_HF_PREPARABLE, "RID_STR_COMMON_NOTE_HF_PREPARABLE"
+ sdm.InitString RID_STR_COMMON_PREPARATION_FOLDER, "RID_STR_COMMON_PREPARATION_FOLDER"
+ sdm.InitString RID_STR_COMMON_SUBISSUE_DOCUMENT_CUSTOM_PROPERTY, "RID_STR_COMMON_SUBISSUE_DOCUMENT_CUSTOM_PROPERTY"
+ sdm.InitString RID_STR_COMMON_MACRO_CLASS_COMPLEX, "RID_STR_COMMON_MACRO_CLASS_COMPLEX"
+ sdm.InitString RID_STR_COMMON_MACRO_CLASS_MEDIUM, "RID_STR_COMMON_MACRO_CLASS_MEDIUM"
+ sdm.InitString RID_STR_COMMON_MACRO_CLASS_SIMPLE, "RID_STR_COMMON_MACRO_CLASS_SIMPLE"
+ sdm.InitString RID_STR_COMMON_MACRO_CLASS_NONE, "RID_STR_COMMON_MACRO_CLASS_NONE"
+ sdm.InitString RID_STR_COMMON_ISSUE_CLASS_COMPLEX, "RID_STR_COMMON_ISSUE_CLASS_COMPLEX"
+ sdm.InitString RID_STR_COMMON_ISSUE_CLASS_MINOR, "RID_STR_COMMON_ISSUE_CLASS_MINOR"
+ sdm.InitString RID_STR_COMMON_ISSUE_CLASS_NONE, "RID_STR_COMMON_ISSUE_CLASS_NONE"
+ sdm.InitString RID_STR_COMMON_OV_VERSION_STR, "RID_STR_COMMON_OV_VERSION_STR"
+ sdm.InitString RID_STR_COMMON_OV_PRODUCT_STR, "RID_STR_COMMON_OV_PRODUCT_STR"
+ sdm.InitString RID_STR_COMMON_OV_DOC_MOD_DATES_COMMENT_TITLE, "RID_STR_COMMON_OV_DOC_MOD_DATES_COMMENT_TITLE"
+ sdm.InitString RID_STR_COMMON_OV_DOC_MOD_DATES_COMMENT_BODY, "RID_STR_COMMON_OV_DOC_MOD_DATES_COMMENT_BODY"
+ sdm.InitString RID_STR_COMMON_OV_LEGEND_TITLE, "RID_STR_COMMON_OV_LEGEND_TITLE"
+ sdm.InitString RID_STR_COMMON_OV_DOC_MOD_DATES_LEGEND_BODY, "RID_STR_COMMON_OV_DOC_MOD_DATES_LEGEND_BODY"
+ sdm.InitString RID_STR_COMMON_OV_DOC_MACRO_COMMENT_TITLE, "RID_STR_COMMON_OV_DOC_MACRO_COMMENT_TITLE"
+ sdm.InitString RID_STR_COMMON_OV_DOC_MACRO_COMMENT_BODY, "RID_STR_COMMON_OV_DOC_MACRO_COMMENT_BODY"
+ sdm.InitString RID_STR_COMMON_OV_DOC_MACRO_LEGEND_BODY, "RID_STR_COMMON_OV_DOC_MACRO_LEGEND_BODY"
+ sdm.InitString RID_STR_COMMON_OV_HIGH_LEVEL_ANALYSIS_DAW, "RID_STR_COMMON_OV_HIGH_LEVEL_ANALYSIS_DAW"
+ sdm.InitString RID_STR_COMMON_OV_HIGH_LEVEL_ANALYSIS_PAW_NO_LIMIT, "RID_STR_COMMON_OV_HIGH_LEVEL_ANALYSIS_PAW_NO_LIMIT"
+ sdm.InitString RID_STR_COMMON_OV_DOC_ANALYSIS_COMMENT_TITLE, "RID_STR_COMMON_OV_DOC_ANALYSIS_COMMENT_TITLE"
+ sdm.InitString RID_STR_COMMON_OV_DOC_ANALYSIS_COMMENT_BODY, "RID_STR_COMMON_OV_DOC_ANALYSIS_COMMENT_BODY"
+ sdm.InitString RID_STR_COMMON_OV_DOC_ANALYSIS_DAW_LEGEND_BODY, "RID_STR_COMMON_OV_DOC_ANALYSIS_DAW_LEGEND_BODY"
+ sdm.InitString RID_STR_COMMON_OV_DOC_ANALYSIS_PAW_LEGEND_BODY, "RID_STR_COMMON_OV_DOC_ANALYSIS_PAW_LEGEND_BODY"
+ sdm.InitString RID_STR_COMMON_OV_DOC_MOD_DATES_CHART_TITLE, "RID_STR_COMMON_OV_DOC_MOD_DATES_CHART_TITLE"
+ sdm.InitString RID_STR_COMMON_OV_DOC_MACRO_CHART_TITLE, "RID_STR_COMMON_OV_DOC_MACRO_CHART_TITLE"
+ sdm.InitString RID_STR_COMMON_OV_DOC_ANALYSIS_CHART_TITLE, "RID_STR_COMMON_OV_DOC_ANALYSIS_CHART_TITLE"
+ sdm.InitString RID_STR_COMMON_PREPARATION_NOTE, "RID_STR_COMMON_PREPARATION_NOTE"
+ sdm.InitString RID_STR_COMMON_CANNOT_OPEN, "RID_STR_COMMON_CANNOT_OPEN"
+ sdm.InitString RID_STR_COMMON_SUBISSUE_LINE_NOTE, "RID_STR_COMMON_SUBISSUE_LINE_NOTE"
+ sdm.InitString RID_STR_COMMON_SUBISSUE_TRANSPARENCY_NOTE, "RID_STR_COMMON_SUBISSUE_TRANSPARENCY_NOTE"
+ sdm.InitString RID_STR_COMMON_SUBISSUE_GRADIENT_PRESET_NOTE, "RID_STR_COMMON_SUBISSUE_GRADIENT_PRESET_NOTE"
+ sdm.InitString RID_STR_COMMON_SUBISSUE_GRADIENT_CORNER_NOTE, "RID_STR_COMMON_SUBISSUE_GRADIENT_CORNER_NOTE"
+ sdm.InitString RID_STR_COMMON_SUBISSUE_GRADIENT_CENTER_NOTE, "RID_STR_COMMON_SUBISSUE_GRADIENT_CENTER_NOTE"
+End Sub
+
diff --git a/migrationanalysis/src/driver_docs/sources/excel/ApplicationSpecific.bas b/migrationanalysis/src/driver_docs/sources/excel/ApplicationSpecific.bas
new file mode 100644
index 000000000000..d74f29baa0b2
--- /dev/null
+++ b/migrationanalysis/src/driver_docs/sources/excel/ApplicationSpecific.bas
@@ -0,0 +1,166 @@
+Attribute VB_Name = "ApplicationSpecific"
+'/*************************************************************************
+' *
+' * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+' *
+' * Copyright 2008 by Sun Microsystems, Inc.
+' *
+' * OpenOffice.org - a multi-platform office productivity suite
+' *
+' * $RCSfile: ApplicationSpecific.bas,v $
+' *
+' * This file is part of OpenOffice.org.
+' *
+' * OpenOffice.org is free software: you can redistribute it and/or modify
+' * it under the terms of the GNU Lesser General Public License version 3
+' * only, as published by the Free Software Foundation.
+' *
+' * OpenOffice.org is distributed in the hope that it will be useful,
+' * but WITHOUT ANY WARRANTY; without even the implied warranty of
+' * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+' * GNU Lesser General Public License version 3 for more details
+' * (a copy is included in the LICENSE file that accompanied this code).
+' *
+' * You should have received a copy of the GNU Lesser General Public License
+' * version 3 along with OpenOffice.org. If not, see
+' * <http://www.openoffice.org/license.html>
+' * for a copy of the LGPLv3 License.
+' *
+' ************************************************************************/
+Option Explicit
+
+'** Issue Categories
+Public Const CID_INFORMATION_REFS = 0
+Public Const CID_CHANGES_AND_REVIEWING = 1
+Public Const CID_CHARTS_TABLES = 2
+Public Const CID_CONTENT_AND_DOCUMENT_PROPERTIES = 3
+Public Const CID_CONTROLS = 4
+Public Const CID_FILTERS = 5
+Public Const CID_FORMAT = 6
+Public Const CID_FUNCTIONS = 7
+Public Const CID_OBJECTS_GRAPHICS = 8
+Public Const CID_PORTABILITY = 9
+Public Const CID_VBA_MACROS = 10
+Public Const CTOTAL_CATEGORIES = 10
+
+'** Excel - XML Issue and SubIssue strings
+Public Const CSTR_ISSUE_CHANGES_AND_REVIEWING = "ChangesAndReviewing"
+Public Const CSTR_ISSUE_CHARTS_TABLES = "ChartsAndTables"
+Public Const CSTR_ISSUE_CONTROLS = "Controls"
+Public Const CSTR_ISSUE_FUNCTIONS = "Functions"
+Public Const CSTR_ISSUE_OBJECTS_GRAPHICS = "ObjectsAndGraphics"
+
+Public Const CSTR_SUBISSUE_ATTRIBUTES = "CellAttributes"
+Public Const CSTR_SUBISSUE_DATEDIF = "DATEDIF"
+Public Const CSTR_SUBISSUE_EMBEDDED_CHART = "EmbeddedChart"
+Public Const CSTR_SUBISSUE_ERROR_TYPE = "ERROR.TYPE"
+Public Const CSTR_SUBISSUE_EXTERNAL = "External"
+Public Const CSTR_SUBISSUE_INFO = "INFO"
+Public Const CSTR_SUBISSUE_MAX_ROWS_EXCEEDED = "MaximumRowsExceeded"
+Public Const CSTR_SUBISSUE_MAX_SHEETS_EXCEEDED = "MaximumSheetsExceeded"
+Public Const CSTR_SUBISSUE_PAGE_SETUP = "PageSetup"
+Public Const CSTR_SUBISSUE_PASSWORD_PROTECTION = "PasswordProtection"
+Public Const CSTR_SUBISSUE_PHONETIC = "PHONETIC"
+Public Const CSTR_SUBISSUE_SHEET_CHART = "SheetChart"
+Public Const CSTR_SUBISSUE_WORKBOOK_PROTECTION = "WorkbookProtection"
+Public Const CSTR_SUBISSUE_ZOOM = "Zoom"
+
+Public Const CSTR_SUBISSUE_CHART_COMPLEX = "ChartIssuesComplex"
+Public Const CSTR_SUBISSUE_CHART_MINOR = "ChartIssuesMinor"
+Public Const CSTR_SUBISSUE_CHART_PIVOT = "Pivot"
+Public Const CSTR_SUBISSUE_INVALID_WORKSHEET_NAME = "InvalidWorksheetName"
+Public Const CSTR_SUBISSUE_DB_QUERY = "DBQuery"
+
+'** END Excel - XML Issue and SubIssue strings
+
+
+Public Const CAPPNAME_WORD = "Word"
+'Public Const CAPPNAME_WORD_DOC = ".doc"
+'Public Const CAPPNAME_WORD_DOT = ".dot"
+
+Public Const CAPPNAME_EXCEL = "Excel"
+Public Const CAPPNAME_EXCEL_DOC = ".xls"
+Public Const CAPPNAME_EXCEL_DOT = ".xlt"
+
+Public Const CAPPNAME_POWERPOINT = "PowerPoint"
+'Public Const CAPPNAME_PP_DOC = ".ppt"
+'Public Const CAPPNAME_PP_DOT = ".pot"
+
+'Public Const CAPP_DOCPROP_LOCATION = "Document"
+Public CAPP_DOCPROP_LOCATION As String
+'Public Const CAPP_DOCPROP_LOCATION = "Presentation"
+
+'Public Const CAPP_XMLDOCPROP_LOCATION = "Document"
+Public Const CAPP_XMLDOCPROP_LOCATION = "Workbook"
+'Public Const CAPP_XMLDOCPROP_LOCATION = "Presentation"
+
+Public Const CTHIS_DOCUMENT = "ThisWorkbook"
+Public Const CTOPLEVEL_PROJECT = "VBAProject"
+
+Public Function getAppSpecificDocExt() As String
+ getAppSpecificDocExt = CAPPNAME_EXCEL_DOC
+End Function
+Public Function getAppSpecificTemplateExt() As String
+ getAppSpecificTemplateExt = CAPPNAME_EXCEL_DOT
+End Function
+
+Public Function getAppSpecificPath() As String
+ getAppSpecificPath = ActiveWorkbook.path
+End Function
+Public Function getAppSpecificApplicationName() As String
+ getAppSpecificApplicationName = CAPPNAME_EXCEL
+End Function
+
+Public Function getAppSpecificCustomDocProperties(currDoc As Workbook) As DocumentProperties
+ Set getAppSpecificCustomDocProperties = currDoc.CustomDocumentProperties
+End Function
+Public Function getAppSpecificCommentBuiltInDocProperty(currDoc As Workbook) As DocumentProperty
+ Set getAppSpecificCommentBuiltInDocProperty = currDoc.BuiltinDocumentProperties("Comments")
+End Function
+
+Public Function getAppSpecificVBProject(currDoc As Workbook) As VBProject
+ Set getAppSpecificVBProject = currDoc.VBProject
+End Function
+
+Public Function getAppSpecificOLEClassType(aShape As Shape) As String
+ Dim objType As String
+
+ If aShape.OLEFormat.ProgID = "" Then
+ objType = aShape.OLEFormat.ClassType
+ Else
+ objType = aShape.OLEFormat.ProgID
+ End If
+
+ getAppSpecificOLEClassType = objType
+End Function
+
+Public Sub SetAppToMinimized()
+ Application.WindowState = xlMinimized
+ Application.Visible = False
+End Sub
+
+Public Sub LocalizeResources()
+ Dim xlStrings As StringDataManager
+ Set xlStrings = New StringDataManager
+
+ xlStrings.InitStringData (GetResourceDataFileName(ThisWorkbook.path))
+ LoadCommonStrings xlStrings
+ LoadExcelStrings xlStrings
+ LoadResultsStrings xlStrings
+ Set xlStrings = Nothing
+
+ SetWBDriverText
+End Sub
+
+Public Sub SetWBDriverText()
+ On Error Resume Next
+ CAPP_DOCPROP_LOCATION = RID_STR_COMMON_RESULTS_LOCATION_TYPE_DOCUMENT
+ ThisWorkbook.Names("RID_STR_DVR_XL_EXCEL_DRIVER").RefersToRange.Cells(1, 1) = RID_STR_DVR_XL_EXCEL_DRIVER
+ ThisWorkbook.Names("RID_STR_DVR_XL_ISSUES").RefersToRange.Cells(1, 1) = RID_STR_DVR_XL_ISSUES
+ ThisWorkbook.Names("RID_STR_DVR_XL_PURPOSE").RefersToRange.Cells(1, 1) = RID_STR_DVR_XL_PURPOSE
+ ThisWorkbook.Names("RID_STR_DVR_XL_READ_README").RefersToRange.Cells(1, 1) = RID_STR_DVR_XL_READ_README
+ ThisWorkbook.Names("RID_STR_DVR_XL_THE_MACROS").RefersToRange.Cells(1, 1) = RID_STR_DVR_XL_THE_MACROS
+ ThisWorkbook.Names("RID_STR_DVR_XL_THIS_DOC").RefersToRange.Cells(1, 1) = RID_STR_DVR_XL_THIS_DOC
+ ThisWorkbook.Names("RID_STR_DVR_XL_TITLE").RefersToRange.Cells(1, 1) = RID_STR_DVR_XL_TITLE
+End Sub
+
diff --git a/migrationanalysis/src/driver_docs/sources/excel/MigrationAnalyser.cls b/migrationanalysis/src/driver_docs/sources/excel/MigrationAnalyser.cls
new file mode 100644
index 000000000000..66f48ed7faaa
--- /dev/null
+++ b/migrationanalysis/src/driver_docs/sources/excel/MigrationAnalyser.cls
@@ -0,0 +1,2321 @@
+VERSION 1.0 CLASS
+BEGIN
+ MultiUse = -1 'True
+END
+Attribute VB_Name = "MigrationAnalyser"
+Attribute VB_GlobalNameSpace = False
+Attribute VB_Creatable = False
+Attribute VB_PredeclaredId = False
+Attribute VB_Exposed = False
+'/*************************************************************************
+' *
+' * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+' *
+' * Copyright 2008 by Sun Microsystems, Inc.
+' *
+' * OpenOffice.org - a multi-platform office productivity suite
+' *
+' * $RCSfile: MigrationAnalyser.cls,v $
+' *
+' * This file is part of OpenOffice.org.
+' *
+' * OpenOffice.org is free software: you can redistribute it and/or modify
+' * it under the terms of the GNU Lesser General Public License version 3
+' * only, as published by the Free Software Foundation.
+' *
+' * OpenOffice.org is distributed in the hope that it will be useful,
+' * but WITHOUT ANY WARRANTY; without even the implied warranty of
+' * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+' * GNU Lesser General Public License version 3 for more details
+' * (a copy is included in the LICENSE file that accompanied this code).
+' *
+' * You should have received a copy of the GNU Lesser General Public License
+' * version 3 along with OpenOffice.org. If not, see
+' * <http://www.openoffice.org/license.html>
+' * for a copy of the LGPLv3 License.
+' *
+' ************************************************************************/
+Option Explicit
+
+Const CWORKBOOK_SHEETS_LIMIT = 256
+
+'Class variables
+Private Enum HFIssueType
+ hfInline
+ hfShape
+ hfFrame
+End Enum
+
+Private Enum HFIssueLocation
+ hfHeader
+ hfFooter
+End Enum
+
+Private Type CellAtrributes
+ LineStyle As Integer
+ FillPattern As Integer
+End Type
+
+Private Type BadSheetNameChar
+ BadChar As String
+ Position As Integer
+End Type
+
+Private mAnalysis As DocumentAnalysis
+Private mFileName As String
+
+Const RID_STR_EXCEL_SUBISSUE_ERROR_TYPE = "ERROR.TYPE"
+Const RID_STR_EXCEL_SUBISSUE_INFO = "INFO"
+Const RID_STR_EXCEL_SUBISSUE_DATEDIF = "DATEDIF"
+Const RID_STR_EXCEL_SUBISSUE_PHONETIC = "PHONETIC"
+Const FontError = 94
+Const CR_BADCHAR = "<TOKEN1>"
+Const CR_BADCHARNUM = "<TOKEN2>"
+Const DATA_SOURCE_EXCEL = 0
+Const DATA_SOURCE_EXTERNAL = 1
+Const DATA_SOURCE_MULTIPLE = 2
+Const DATA_SOURCE_EXTERNAL_FILE = 3
+Const C_MAX_CELL_RANGE_COUNT = 10000
+
+Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
+
+'***ADDING-ISSUE: Use Following Skeleton as Guideline for Adding Issue
+' For complete list of all RID_STR_... for Issues (IssueType), SubIssues (SubType) and Attributes refer to:
+' excel_res.bas and common_res.bas
+'
+' For complete list of all CID_... for Issue Categories(IssueID) and
+' CSTR_... for XML Issues (IssueTypeXML) and XML SubIssues (SubTypeXML) refer to:
+' ApplicationSpecific.bas and CommonMigrationAnalyser.bas
+'
+' You should not have to add any new Issue Categories or matching IssueTypes, only new SubIssues
+Sub Analyze_SKELETON()
+ On Error GoTo HandleErrors
+ Dim currentFunctionName As String
+ currentFunctionName = "Analyze_SKELETON"
+ Dim myIssue As IssueInfo
+ Set myIssue = New IssueInfo
+
+ With myIssue
+ .IssueID = CID_VBA_MACROS 'Issue Category
+ .IssueType = RID_STR_COMMON_ISSUE_VBA_MACROS 'Issue String
+ .SubType = RID_STR_COMMON_SUBISSUE_PROPERTIES 'SubIssue String
+ .Location = .CLocationDocument 'Location string
+
+ .IssueTypeXML = CSTR_ISSUE_VBA_MACROS 'Non localised XML Issue String
+ .SubTypeXML = CSTR_SUBISSUE_PROPERTIES 'Non localised XML SubIssue String
+ .locationXML = .CXMLLocationDocument 'Non localised XML location
+
+ .SubLocation = 0 'if not set will default to RID_STR_NOT_AVAILABLE_SHORTHAND
+ .Line = 0 'if not set will default to RID_STR_NOT_AVAILABLE_SHORTHAND
+ .column = 0 'if not set will default to RID_STR_NOT_AVAILABLE_SHORTHAND
+
+ ' Add as many Attribute Value pairs as needed
+ ' Note: following must always be true - Attributes.Count = Values.Count
+ .Attributes.Add "AAA"
+ .Values.Add "foobar"
+
+ ' Use AddIssueDetailsNote to add notes to the Issue Details if required
+ ' Public Sub AddIssueDetailsNote(myIssue As IssueInfo, noteNum As Long, noteStr As String, _
+ ' Optional preStr As String = RID_STR_COMMON_NOTE_PRE)
+ ' Where preStr is prepended to the output, with "Note" as the default
+ AddIssueDetailsNote myIssue, 0, RID_STR_COMMON_NOTE_DOCUMENT_PROPERTIES_LOST
+
+ mAnalysis.IssuesCountArray(CID_VBA_MACROS) = _
+ mAnalysis.IssuesCountArray(CID_VBA_MACROS) + 1
+ End With
+
+ mAnalysis.Issues.Add myIssue
+
+FinalExit:
+ Set myIssue = Nothing
+ Exit Sub
+
+HandleErrors:
+ WriteDebug currentFunctionName & " : " & mAnalysis.name & ": " & Err.Number & " " & Err.Description & " " & Err.Source
+ Resume FinalExit
+End Sub
+
+Sub DoAnalyse(fileName As String, userFormTypesDict As Scripting.Dictionary, _
+ startDir As String, storeToDir As String, fso As FileSystemObject)
+ On Error GoTo HandleErrors
+ Dim currentFunctionName As String
+ currentFunctionName = "DoAnalyse"
+ 'Dim secAutomation As MsoAutomationSecurity
+ 'secAutomation = Application.AutomationSecurity
+
+ mAnalysis.name = fileName
+ Dim aWB As Workbook
+ mAnalysis.TotalIssueTypes = CTOTAL_CATEGORIES
+
+ 'Make Excel run as non interactively as possible
+ Application.EnableEvents = False
+ Application.DisplayAlerts = False
+ Application.Interactive = False
+ Application.AskToUpdateLinks = False
+ Application.EnableAnimations = False
+ Application.EnableSound = False
+
+ 'Only supported in Office XP and above
+ 'Application.AutomationSecurity = msoAutomationSecurityForceDisable
+ 'mFileName = fso.GetFileName(fileName)
+ 'WriteToLog "TmpDebug1", mFileName
+
+ Dim myPassword As String
+
+ myPassword = GetDefaultPassword
+
+ If myPassword = "" Then
+ myPassword = "xoxoxoxoxo"
+ End If
+
+ Set aWB = Workbooks.Open(fileName:=fileName, _
+ Password:=myPassword, _
+ WriteResPassword:=myPassword, _
+ UpdateLinks:=0)
+
+ 'Application.AutomationSecurity = secAutomation
+
+ 'Do Analysis
+ Analyze_Password_Protection aWB
+ Analyze_Workbook_Protection aWB
+
+ 'Set Doc Properties
+ SetDocProperties mAnalysis, aWB, fso
+
+ Analyze_SheetLimits aWB
+ Analyze_SheetDisplay aWB
+ Analyze_SheetIssues aWB
+ Analyze_SheetCharts aWB
+ Analyze_WorkbookVersion aWB
+ Analyze_Macros mAnalysis, userFormTypesDict, aWB
+
+ ' Doc Preparation only
+ ' Save document with any fixed issues under <storeToDir>\prepared\<source doc name>
+ If mAnalysis.PreparableIssuesCount > 0 And CheckDoPrepare Then
+ Dim preparedFullPath As String
+ preparedFullPath = GetPreparedFullPath(mAnalysis.name, startDir, storeToDir, fso)
+ If preparedFullPath <> "" Then
+ If fso.FileExists(preparedFullPath) Then
+ fso.DeleteFile preparedFullPath, True
+ End If
+ If fso.FolderExists(fso.GetParentFolderName(preparedFullPath)) Then
+ If IsOldVersion(aWB.FileFormat) Then
+ aWB.SaveAs fileName:=preparedFullPath, FileFormat:=xlExcel9795
+ Else
+ aWB.SaveAs preparedFullPath
+ End If
+ End If
+ End If
+ End If
+
+FinalExit:
+ If Not aWB Is Nothing Then
+ aWB.Close (False)
+ End If
+
+ Set aWB = Nothing
+
+ Application.EnableEvents = True
+ Application.DisplayAlerts = True
+ Application.Interactive = True
+ Application.AskToUpdateLinks = True
+ Application.EnableAnimations = True
+ Application.EnableSound = True
+
+ 'Debug - Call Sleep(5000)
+ Exit Sub
+
+HandleErrors:
+ ' MsgBox currentFunctionName & " : " & fileName & ": " & Err.Number & " " & Err.Description & " " & Err.Source
+ ' Handle Password error on Doc Open, Modify and Cancel
+ If Err.Number = 1004 Then
+ WriteDebug currentFunctionName & " : " & fileName & ": " & _
+ "User entered Invalid Document Password - " & Err.Number & " " & Err.Description & " " & Err.Source
+ HandleProtectedDocInvalidPassword mAnalysis, _
+ "User entered Invalid Document Password, further analysis not possible", fso
+ Resume FinalExit
+ End If
+ mAnalysis.Application = RID_STR_COMMON_CANNOT_OPEN
+ WriteDebug currentFunctionName & " : " & fileName & ": " & Err.Number & " " & Err.Description & " " & Err.Source
+ Resume FinalExit
+End Sub
+
+Sub Analyze_SheetCharts(aWB As Workbook)
+ On Error GoTo HandleErrors
+ Dim currentFunctionName As String
+ currentFunctionName = "Analyze_SheetCharts"
+
+ Dim myChartSheet As Chart
+
+ For Each myChartSheet In aWB.Charts
+ SetChartIssueMinor myChartSheet, myChartSheet.name, False
+ SetChartIssueComplex myChartSheet, myChartSheet.name
+ Next myChartSheet
+
+ Exit Sub
+HandleErrors:
+ WriteDebug currentFunctionName & " : " & mAnalysis.name & ": " & Err.Number & " " & Err.Description & " " & Err.Source
+End Sub
+
+Sub Analyze_EmbeddedCharts(mySheet As Worksheet)
+ On Error GoTo HandleErrors
+ Dim currentFunctionName As String
+ currentFunctionName = "Analyze_EmbeddedCharts"
+ Dim BorderIssue As Boolean
+
+ Dim index As Integer
+ BorderIssue = False
+ Dim chartcount As Integer
+ Dim myChart As Chart
+
+ chartcount = mySheet.ChartObjects.count
+
+ For index = 1 To chartcount
+ BorderIssue = False
+ With mySheet.ChartObjects(index)
+ If .Border.LineStyle <> xlLineStyleNone Then
+ BorderIssue = True
+ End If
+ SetChartIssueMinor .Chart, mySheet.name, BorderIssue
+ 'If Not ((.ChartType = xlSurface) _
+ ' And (.ChartType = xlSurfaceTopViewWireframe) _
+ ' And (.ChartType = xlSurfaceTopView)) Then
+ SetChartIssueComplex .Chart, mySheet.name
+ 'End If
+ End With
+ Next index
+
+ Exit Sub
+HandleErrors:
+ WriteDebug currentFunctionName & " : " & mAnalysis.name & ": " & Err.Number & " " & Err.Description & " " & Err.Source
+End Sub
+
+Private Function getType(o As Variant) As Integer
+ If (VarType(o) = vbString) Then
+ Dim aDataSource As String
+ aDataSource = o
+ getType = DATA_SOURCE_EXCEL
+ If (Len(aDataSource) > 0) Then
+ Dim nBackslashPos As Long
+ nBackslashPos = InStr(Trim(aDataSource), "\")
+ If (nBackslashPos > 0 And nBackslashPos < 4) Then
+ getType = DATA_SOURCE_EXTERNAL_FILE
+ End If
+ End If
+ ElseIf (IsArray(o)) Then
+ If (hasSecondDimension(o)) Then
+ getType = DATA_SOURCE_MULTIPLE
+ Else
+ getType = DATA_SOURCE_EXTERNAL
+ End If
+ End If
+End Function
+
+Private Function hasSecondDimension(o2 As Variant) As Boolean
+ On Error GoTo njet
+ Dim temp As Integer
+ temp = UBound(o2, 2)
+ hasSecondDimension = True
+ Exit Function
+njet:
+ hasSecondDimension = False
+End Function
+
+Private Sub Analyze_PivotTable(myIssue As IssueInfo, myPivotTable As PivotTable)
+ On Error GoTo HandleErrors
+ Dim currentFunctionName As String
+ currentFunctionName = "Analyse_PivotTable"
+
+ Dim aPivotField As PivotField
+ Dim aNoteCount As Long
+ Dim bManualSort As Boolean
+ Dim bCalculatedValues As Boolean
+ Dim aSorting As XlSortOrder
+ Dim nCount As Integer
+ Dim nDataSource As Integer
+
+ bManualSort = False
+ bCalculatedValues = False
+
+ For Each aPivotField In myPivotTable.PivotFields
+ aSorting = xlAscending
+
+ On Error Resume Next 'some fields don't have any property at all
+ aSorting = aPivotField.AutoSortOrder
+ On Error GoTo HandleErrors
+
+ If (aSorting = xlManual) Then
+ bManualSort = True
+ End If
+
+ nCount = 0
+
+ On Error Resume Next 'some fields don't have any property at all
+ nCount = aPivotField.CalculatedItems.count
+ On Error GoTo HandleErrors
+
+ If (nCount > 0) Then
+ bCalculatedValues = True
+ End If
+ Next
+
+ nCount = 0
+
+ On Error Resume Next 'some fields don't have any property at all
+ nCount = myPivotTable.CalculatedFields.count
+ On Error GoTo HandleErrors
+
+ If (nCount > 0) Then
+ bCalculatedValues = True
+ End If
+
+ nDataSource = getType(myPivotTable.SourceData)
+
+ aNoteCount = 0
+
+ If (bManualSort) Then
+ AddIssueDetailsNote myIssue, aNoteCount, RID_RESXLT_COST_PIVOT_ManSort_Comment
+ aNoteCount = aNoteCount + 1
+ End If
+
+ If (nDataSource = DATA_SOURCE_EXTERNAL) Then
+ AddIssueDetailsNote myIssue, aNoteCount, RID_RESXLT_COST_PIVOT_ExternData_Comment
+ aNoteCount = aNoteCount + 1
+ ElseIf (nDataSource = DATA_SOURCE_MULTIPLE) Then
+ AddIssueDetailsNote myIssue, aNoteCount, RID_RESXLT_COST_PIVOT_MultConsRanges_Comment
+ aNoteCount = aNoteCount + 1
+ ElseIf (nDataSource = DATA_SOURCE_EXTERNAL_FILE) Then
+ Dim noteString As String
+ noteString = RID_RESXLT_COST_PIVOT_ExternData_Comment & "[" & _
+ myPivotTable.SourceData & "]"
+ AddIssueDetailsNote myIssue, aNoteCount, noteString
+ aNoteCount = aNoteCount + 1
+ End If
+
+ If (bCalculatedValues) Then
+ AddIssueDetailsNote myIssue, aNoteCount, RID_RESXLT_COST_PIVOT_CalcVal_Comment
+ aNoteCount = aNoteCount + 1
+ End If
+
+FinalExit:
+ Exit Sub
+
+HandleErrors:
+ WriteDebug currentFunctionName & " : " & mAnalysis.name & ": " & Err.Number & " " & Err.Description & " " & Err.Source
+ Resume FinalExit
+End Sub
+
+Private Sub SetChartIssueComplex(myChart As Chart, myName As String)
+ On Error GoTo HandleErrors
+ Dim currentFunctionName As String
+ currentFunctionName = "SetChartIssueComplex"
+
+ Dim myIssue As IssueInfo
+ Dim bSeriesChartTypeChanged As Boolean
+ Dim bDatasourceNotLinkedtoCell As Boolean
+ Dim bDatasourceOnDifferentSheet As Boolean
+ Dim bCategoryandValue As Boolean
+ Dim bCLabelMorethanOneCell As Boolean
+ Dim bOneColumnRow As Boolean
+ Dim bDataTable As Boolean
+ Dim bXAxes As Boolean
+ Dim bseries As Boolean
+ Dim bformat As Boolean
+ Dim bpivot As Boolean
+
+
+ Set myIssue = New IssueInfo
+ bSeriesChartTypeChanged = False
+ bDatasourceNotLinkedtoCell = False
+ bDatasourceOnDifferentSheet = False
+ bCategoryandValue = False
+ bCLabelMorethanOneCell = False
+ bOneColumnRow = False
+ bDataTable = False
+ bXAxes = False
+
+ bformat = FormatIssueComplex(myChart, bDataTable, bXAxes)
+ bseries = SeriesIssue(myChart, bSeriesChartTypeChanged, bDatasourceNotLinkedtoCell, bDatasourceOnDifferentSheet, bCategoryandValue, bCLabelMorethanOneCell, bOneColumnRow)
+ bpivot = Not (myChart.PivotLayout Is Nothing)
+
+ If (Not (bseries Or bformat Or bpivot)) Then
+ GoTo FinalExit
+ ElseIf bpivot Then
+ With myIssue
+ .IssueID = CID_CHARTS_TABLES
+ .IssueType = RID_STR_EXCEL_ISSUE_CHARTS_AND_TABLES
+ .SubType = RID_STR_EXCEL_SUBISSUE_PIVOT
+ .Location = .CLocationSheet
+ .SubLocation = myName
+
+ .IssueTypeXML = CSTR_ISSUE_CHARTS_TABLES
+ .SubTypeXML = CSTR_SUBISSUE_CHART_PIVOT
+ .locationXML = .CXMLLocationSheet
+ .Attributes.Add RID_STR_EXCEL_ATTRIBUTE_PIVOT_TABLE_NAME
+ .Values.Add myChart.PivotLayout.PivotTable.name
+ .Attributes.Add RID_STR_EXCEL_ATTRIBUTE_PIVOT_FIELDS_VISIBLE
+ .Values.Add myChart.HasPivotFields
+ .Attributes.Add RID_STR_EXCEL_ATTRIBUTE_PIVOT_FIELDS_NUM
+ .Values.Add myChart.PivotLayout.PivotTable.PivotFields.count
+ .Attributes.Add RID_STR_EXCEL_ATTRIBUTE_TYPE
+ .Values.Add getChartTypeAsString(myChart.ChartType)
+ .Attributes.Add RID_STR_EXCEL_ATTRIBUTE_CHARTNAME
+ .Values.Add myChart.name
+ End With
+
+ AddIssueDetailsNote myIssue, 0, RID_RESXLT_COST_PIVOT_PivotChart_Comment
+ mAnalysis.IssuesCountArray(CID_CHARTS_TABLES) = _
+ mAnalysis.IssuesCountArray(CID_CHARTS_TABLES) + 1
+ mAnalysis.Issues.Add myIssue
+
+ GoTo FinalExit
+ Else
+ With myIssue
+ Dim NoteIndex As Long
+ NoteIndex = 0
+
+ .IssueID = CID_CHARTS_TABLES
+ .IssueType = RID_STR_EXCEL_ISSUE_CHARTS_AND_TABLES
+ .SubType = RID_STR_EXCEL_SUBISSUE_CHART_COMPLEX
+ .Location = .CLocationSheet
+ .SubLocation = myName
+
+ .IssueTypeXML = CSTR_ISSUE_CHARTS_TABLES
+ .SubTypeXML = CSTR_SUBISSUE_CHART_COMPLEX
+ .locationXML = .CXMLLocationSheet
+
+ If bDataTable Then
+ .Attributes.Add RID_STR_EXCEL_ATTRIBUTE_DATATABLE
+ .Values.Add RID_STR_EXCEL_ATTRIBUTE_SET
+ AddIssueDetailsNote myIssue, NoteIndex, RID_STR_EXCEL_NOTE_DATATABLE
+ NoteIndex = NoteIndex + 1
+ End If
+ If bXAxes Then
+ .Attributes.Add RID_STR_EXCEL_ATTRIBUTE_XAXISCATEGORY
+ .Values.Add RID_STR_EXCEL_ATTRIBUTE_TIMESCALE
+ AddIssueDetailsNote myIssue, NoteIndex, RID_STR_EXCEL_NOTE_XAXISCATEGORY
+ NoteIndex = NoteIndex + 1
+ End If
+ If bSeriesChartTypeChanged Then
+ .Attributes.Add RID_STR_EXCEL_ATTRIBUTE_SERIESCHARTTYPE
+ .Values.Add RID_STR_EXCEL_ATTRIBUTE_CHANGED
+ AddIssueDetailsNote myIssue, NoteIndex, RID_STR_EXCEL_NOTE_SERIESCHARTTYPE
+ NoteIndex = NoteIndex + 1
+ End If
+ If bDatasourceNotLinkedtoCell Then
+ .Attributes.Add RID_STR_EXCEL_ATTRIBUTE_DATASOURCE
+ .Values.Add RID_STR_EXCEL_ATTRIBUTE_DATASOURCENOTLINKEDTOCELL
+ AddIssueDetailsNote myIssue, NoteIndex, RID_STR_EXCEL_NOTE_DATASOURCENOTLINKEDTOCELL
+ NoteIndex = NoteIndex + 1
+ End If
+ If bDatasourceOnDifferentSheet Then
+ .Attributes.Add RID_STR_EXCEL_ATTRIBUTE_DATASOURCE
+ .Values.Add RID_STR_EXCEL_ATTRIBUTE_DATASOURCEONDIFFERENTSHEET
+ AddIssueDetailsNote myIssue, NoteIndex, RID_STR_EXCEL_NOTE_DATASOURCEONDIFFERENTSHEET
+ NoteIndex = NoteIndex + 1
+ End If
+ If bCategoryandValue Then
+ .Attributes.Add RID_STR_EXCEL_ATTRIBUTE_CATEGORYANDDATA
+ .Values.Add RID_STR_EXCEL_ATTRIBUTE_SEPARATE
+ AddIssueDetailsNote myIssue, NoteIndex, RID_STR_EXCEL_NOTE_CATEGORYANDDATA
+ NoteIndex = NoteIndex + 1
+ End If
+ If bCLabelMorethanOneCell Then
+ .Attributes.Add RID_STR_EXCEL_ATTRIBUTE_CATEGORYLABEL
+ .Values.Add RID_STR_EXCEL_ATTRIBUTE_CATEGORYLABELMORETHANONECELL
+ AddIssueDetailsNote myIssue, NoteIndex, RID_STR_EXCEL_NOTE_CATEGORYLABELMORETHANONECELL
+ NoteIndex = NoteIndex + 1
+ End If
+ If bOneColumnRow Then
+ .Attributes.Add RID_STR_EXCEL_ATTRIBUTE_COLUMNBAR
+ .Values.Add RID_STR_EXCEL_ATTRIBUTE_ONECOLUMNROW
+ AddIssueDetailsNote myIssue, NoteIndex, RID_STR_EXCEL_NOTE_COLUMNBAR
+ NoteIndex = NoteIndex + 1
+ End If
+ .Attributes.Add RID_STR_EXCEL_ATTRIBUTE_TYPE
+ .Values.Add getChartTypeAsString(myChart.ChartType)
+ .Attributes.Add RID_STR_EXCEL_ATTRIBUTE_CHARTNAME
+ .Values.Add myChart.name
+ End With
+
+ mAnalysis.IssuesCountArray(CID_CHARTS_TABLES) = _
+ mAnalysis.IssuesCountArray(CID_CHARTS_TABLES) + 1
+ mAnalysis.Issues.Add myIssue
+ End If
+FinalExit:
+ Set myIssue = Nothing
+ Exit Sub
+
+HandleErrors:
+ WriteDebug currentFunctionName & " : " & mAnalysis.name & ": " & Err.Number & " " & Err.Description & " " & Err.Source
+ Resume FinalExit
+End Sub
+
+Private Sub SetChartIssueMinor(myChart As Chart, myName As String, BorderIssue As Boolean)
+ On Error GoTo HandleErrors
+ Dim currentFunctionName As String
+ currentFunctionName = "SetChartIssueMinor"
+
+ Dim myIssue As IssueInfo
+ Dim bUnsupportedType As Boolean
+ Dim bTrendline As Boolean
+ Dim bDatalabelWithLegend As Boolean
+ Dim bLegendPosition As Boolean
+ Dim bTitleFont As Boolean
+ Dim bPiechartDirection As Boolean
+ Dim bAxisInterval As Boolean
+
+
+ Set myIssue = New IssueInfo
+ bUnsupportedType = False
+ bTrendline = False
+ bDatalabelWithLegend = False
+ bLegendPosition = False
+ bTitleFont = False
+ bPiechartDirection = False
+ bAxisInterval = False
+
+
+ If (Not FormatissueMinor(myChart, bUnsupportedType, bTrendline, bDatalabelWithLegend, bLegendPosition, bTitleFont, bPiechartDirection, bAxisInterval)) And (Not BorderIssue) Then
+ GoTo FinalExit
+ Else
+ With myIssue
+ Dim NoteIndex As Long
+ NoteIndex = 0
+
+ .IssueID = CID_CHARTS_TABLES
+ .IssueType = RID_STR_EXCEL_ISSUE_CHARTS_AND_TABLES
+
+ .SubType = RID_STR_EXCEL_SUBISSUE_CHART_MINOR
+ .Location = .CLocationSheet
+ .SubLocation = myName
+
+ .IssueTypeXML = CSTR_ISSUE_CHARTS_TABLES
+ .SubTypeXML = CSTR_SUBISSUE_CHART_PIVOT
+ .locationXML = .CXMLLocationSheet
+
+ If bUnsupportedType Then
+ .Attributes.Add RID_STR_EXCEL_ATTRIBUTE_UNSUPPORTEDTYPE
+ .Values.Add getChartTypeAsString(myChart.ChartType)
+ ' bubble chart
+ If (myChart.ChartType = xlBubble Or myChart.ChartType = xlBubble3DEffect) Then
+ AddIssueDetailsNote myIssue, NoteIndex, RID_RESXLT_COST_CHART_Bubble_Comment
+ ' bar of pie and pie of pie chart
+ ElseIf (myChart.ChartType = xlPieOfPie Or myChart.ChartType = xlBarOfPie) Then
+ AddIssueDetailsNote myIssue, NoteIndex, RID_RESXLT_COST_CHART_BarOfPie_Comment
+ ' Scatter chart
+ ElseIf (myChart.ChartType = xlXYScatter Or myChart.ChartType = xlXYScatterLines _
+ Or myChart.ChartType = xlXYScatterLinesNoMarkers _
+ Or myChart.ChartType = xlXYScatterSmooth _
+ Or myChart.ChartType = xlXYScatterSmoothNoMarkers) Then
+ AddIssueDetailsNote myIssue, NoteIndex, RID_RESXLT_COST_CHART_Scattered_Comment
+ ' radar chart
+ ElseIf (myChart.ChartType = xlRadarMarkers Or myChart.ChartType = xlRadar) Then
+ AddIssueDetailsNote myIssue, NoteIndex, RID_RESXLT_COST_CHART_Radar_Comment
+ ' radar filled chart
+ ElseIf (myChart.ChartType = xlRadarFilled) Then
+ AddIssueDetailsNote myIssue, NoteIndex, RID_RESXLT_COST_CHART_FilledRadar_Comment
+ ' surface chart
+ ElseIf (myChart.ChartType = xlSurface Or myChart.ChartType = xlSurfaceTopView _
+ Or myChart.ChartType = xlSurfaceTopViewWireframe _
+ Or myChart.ChartType = xlSurfaceWireframe) Then
+ AddIssueDetailsNote myIssue, NoteIndex, RID_RESXLT_COST_CHART_Surface_Comment
+ Else
+ AddIssueDetailsNote myIssue, NoteIndex, RID_STR_EXCEL_NOTE_UNSUPPORTEDTYPE1
+ NoteIndex = NoteIndex + 1
+ AddIssueDetailsNote myIssue, NoteIndex, RID_STR_EXCEL_NOTE_UNSUPPORTEDTYPE2
+ End If
+ NoteIndex = NoteIndex + 1
+ End If
+ If bTrendline Then
+ .Attributes.Add RID_STR_EXCEL_ATTRIBUTE_TRENDLINE
+ .Values.Add RID_STR_EXCEL_ATTRIBUTE_SET
+ AddIssueDetailsNote myIssue, NoteIndex, RID_STR_EXCEL_NOTE_TRENDLINE
+ NoteIndex = NoteIndex + 1
+ End If
+ If bDatalabelWithLegend Then
+ .Attributes.Add RID_STR_EXCEL_ATTRIBUTE_DATALABELWITHLEGEND
+ .Values.Add RID_STR_EXCEL_ATTRIBUTE_SET
+ AddIssueDetailsNote myIssue, NoteIndex, RID_STR_EXCEL_NOTE_DATALABELWITHLEGEND
+ NoteIndex = NoteIndex + 1
+ End If
+ If bLegendPosition Then
+ .Attributes.Add RID_STR_EXCEL_ATTRIBUTE_LEGENDPOSITION
+ .Values.Add RID_STR_EXCEL_ATTRIBUTE_NOTRIGHT
+ AddIssueDetailsNote myIssue, NoteIndex, RID_STR_EXCEL_NOTE_LEGENDPOSITION
+ NoteIndex = NoteIndex + 1
+ End If
+ If bTitleFont Then
+ .Attributes.Add RID_STR_EXCEL_ATTRIBUTE_TITLEFONT
+ .Values.Add RID_STR_EXCEL_ATTRIBUTE_DIFFERENT
+ AddIssueDetailsNote myIssue, NoteIndex, RID_STR_EXCEL_NOTE_TITLEFONT
+ NoteIndex = NoteIndex + 1
+ End If
+ If bPiechartDirection Then
+ .Attributes.Add RID_STR_EXCEL_ATTRIBUTE_PIE
+ .Values.Add RID_STR_EXCEL_ATTRIBUTE_SLICES_IN_DIFFERENT_DIRECTION
+ End If
+ If BorderIssue Then
+ .Attributes.Add RID_STR_EXCEL_ATTRIBUTE_BORDER
+ .Values.Add RID_STR_EXCEL_ATTRIBUTE_SET
+ AddIssueDetailsNote myIssue, NoteIndex, RID_STR_EXCEL_NOTE_BORDER
+ NoteIndex = NoteIndex + 1
+ End If
+ If bAxisInterval Then
+ .Attributes.Add RID_STR_EXCEL_ATTRIBUTE_AXISINTERVAL
+ .Values.Add RID_STR_EXCEL_ATTRIBUTE_AUTO
+ AddIssueDetailsNote myIssue, NoteIndex, RID_STR_EXCEL_NOTE_AXISINTERVAL
+ NoteIndex = NoteIndex + 1
+ End If
+ .Attributes.Add RID_STR_EXCEL_ATTRIBUTE_CHARTNAME
+ .Values.Add myChart.name
+ End With
+
+ mAnalysis.IssuesCountArray(CID_CHARTS_TABLES) = _
+ mAnalysis.IssuesCountArray(CID_CHARTS_TABLES) + 1
+ mAnalysis.Issues.Add myIssue
+ End If
+FinalExit:
+ Set myIssue = Nothing
+ Exit Sub
+
+HandleErrors:
+ WriteDebug currentFunctionName & " : " & mAnalysis.name & ": " & Err.Number & " " & Err.Description & " " & Err.Source
+ Resume FinalExit
+End Sub
+
+Sub SetChartIssue(myChart As Chart, myName As String, strSubType As String, _
+ strXMLSubType As String)
+ On Error GoTo HandleErrors
+ Dim currentFunctionName As String
+ currentFunctionName = "SetChartIssue"
+ Dim myIssue As IssueInfo
+ Dim bUnsupportedPosition As Boolean
+
+ Set myIssue = New IssueInfo
+
+ ' Common Settings
+ With myIssue
+ .IssueID = CID_CHARTS_TABLES
+ .IssueType = RID_STR_EXCEL_ISSUE_CHARTS_AND_TABLES
+ .SubType = strSubType
+ .Location = .CLocationSheet
+ .SubLocation = myName
+
+ .IssueTypeXML = CSTR_ISSUE_CHARTS_TABLES
+ .SubTypeXML = strXMLSubType
+ .locationXML = .CXMLLocationSheet
+
+
+ If myChart.HasTitle Then
+ .Attributes.Add RID_STR_EXCEL_ATTRIBUTE_TITLE
+ .Values.Add myChart.chartTitle.Text
+ End If
+ .Attributes.Add RID_STR_EXCEL_ATTRIBUTE_TYPE
+ .Values.Add myChart.ChartType 'TBD - getChartTypeAsString() convert to String
+
+ 'Pie Chart
+ If (myChart.ChartType = xlPie) Or _
+ (myChart.ChartType = xlPieExploded) Or _
+ (myChart.ChartType = xlPieOfPie) Or _
+ (myChart.ChartType = xl3DPie) Or _
+ (myChart.ChartType = xl3DPieExploded) Then
+ .Attributes.Add RID_STR_EXCEL_ATTRIBUTE_PIE
+ .Values.Add RID_STR_EXCEL_ATTRIBUTE_SLICES_IN_DIFFERENT_DIRECTION
+ End If
+
+ If Not myChart.PivotLayout Is Nothing Then
+ 'Pivot Chart
+ .SubType = RID_STR_EXCEL_SUBISSUE_PIVOT & " " & strSubType
+
+ 'Pivot Chart details
+ .Attributes.Add RID_STR_EXCEL_ATTRIBUTE_PIVOT_TABLE_NAME
+ .Values.Add myChart.PivotLayout.PivotTable.name
+ .Attributes.Add RID_STR_EXCEL_ATTRIBUTE_PIVOT_FIELDS_VISIBLE
+ .Values.Add myChart.HasPivotFields
+ .Attributes.Add RID_STR_EXCEL_ATTRIBUTE_PIVOT_FIELDS_NUM
+ .Values.Add myChart.PivotLayout.PivotTable.PivotFields.count
+ End If
+ End With
+
+ mAnalysis.IssuesCountArray(CID_CHARTS_TABLES) = _
+ mAnalysis.IssuesCountArray(CID_CHARTS_TABLES) + 1
+ mAnalysis.Issues.Add myIssue
+
+FinalExit:
+ Set myIssue = Nothing
+ Exit Sub
+
+HandleErrors:
+ WriteDebug currentFunctionName & " : " & mAnalysis.name & ": " & Err.Number & " " & Err.Description & " " & Err.Source
+ Resume FinalExit
+End Sub
+
+Function getLineStyleAsString(myLineStyle As XlLineStyle) As String
+
+ On Error GoTo HandleErrors
+ Dim currentFunctionName As String
+ currentFunctionName = "getLineStyleAsString"
+
+ Dim strVal As String
+
+ Select Case myLineStyle
+ Case xlContinuous
+ strVal = RID_STR_EXCEL_ENUMERATION_LINE_STYLE_CONTINUOUS
+ Case xlDash
+ strVal = RID_STR_EXCEL_ENUMERATION_LINE_STYLE_DASH
+ Case xlDashDot
+ strVal = RID_STR_EXCEL_ENUMERATION_LINE_STYLE_DASHDOT
+ Case xlDot
+ strVal = RID_STR_EXCEL_ENUMERATION_LINE_STYLE_DOT
+ Case xlDouble
+ strVal = RID_STR_EXCEL_ENUMERATION_LINE_STYLE_DOUBLE
+ Case xlSlantDashDot
+ strVal = RID_STR_EXCEL_ENUMERATION_LINE_STYLE_SLANTDASHDOT
+ Case xlLineStyleNone
+ strVal = RID_STR_EXCEL_ENUMERATION_LINE_STYLE_LINESTYLENONE
+ Case Else
+ strVal = RID_STR_EXCEL_ENUMERATION_UNKNOWN
+ End Select
+
+
+ getLineStyleAsString = strVal
+HandleErrors:
+ WriteDebug currentFunctionName & " : " & mAnalysis.name & ": " & Err.Number & " " & Err.Description & " " & Err.Source
+End Function
+
+Function getChartTypeAsString(myChartType As XlChartType) As String
+ '*********************************************************
+ '**** Localisation: ON HOLD ******************************
+ '*********************************************************
+ On Error GoTo HandleErrors
+ Dim currentFunctionName As String
+ currentFunctionName = "getChartTypeAsString"
+
+ Dim strVal As String
+
+ Select Case myChartType
+ Case xl3DArea
+ strVal = "3DArea"
+ Case xl3DAreaStacked
+ strVal = "3DAreaStacked"
+ Case xl3DAreaStacked100
+ strVal = "3DAreaStacked100"
+ Case xl3DBarClustered
+ strVal = "3DBarClustered"
+ Case xl3DBarStacked
+ strVal = "xl3DBarStacked"
+ Case xl3DBarStacked100
+ strVal = "xl3DBarStacked100"
+ Case xl3DColumn
+ strVal = "3DColumn"
+ Case xl3DColumnClustered
+ strVal = "xl3DColumnClustered"
+ Case xl3DColumnStacked
+ strVal = "xl3DColumnStacked"
+ Case xl3DColumnStacked100
+ strVal = "xl3DColumnStacked100"
+ Case xl3DLine
+ strVal = "3DLine"
+ Case xl3DPie
+ strVal = "3DPie"
+ Case xl3DPieExploded
+ strVal = "3DPieExploded"
+ Case xlArea
+ strVal = "Area"
+ Case xlAreaStacked
+ strVal = "AreaStacked"
+ Case xlAreaStacked100
+ strVal = "AreaStacked100"
+ Case xlBarClustered
+ strVal = "BarClustered"
+ Case xlBarOfPie
+ strVal = "BarOfPie"
+ Case xlBarStacked
+ strVal = "BarStacked"
+ Case xlBarStacked100
+ strVal = "BarStacked100"
+ Case xlBubble
+ strVal = "Bubble"
+ Case xlBubble3DEffect
+ strVal = "Bubble3DEffect"
+ Case xlColumnClustered
+ strVal = "ColumnClustered"
+ Case xlColumnStacked
+ strVal = "ColumnStacked"
+ Case xlColumnStacked100
+ strVal = "ColumnStacked100"
+ Case xlConeBarClustered
+ strVal = "ConeBarClustered"
+ Case xlConeBarStacked
+ strVal = "ConeBarStacked"
+ Case xlConeBarStacked100
+ strVal = "ConeBarStacked100"
+ Case xlConeCol
+ strVal = "ConeCol"
+ Case xlConeColClustered
+ strVal = "ConeColClustered"
+ Case xlConeColStacked
+ strVal = "ConeColStacked"
+ Case xlConeColStacked100
+ strVal = "ConeColStacked100"
+ Case xlCylinderBarClustered
+ strVal = "CylinderBarClustered"
+ Case xlCylinderBarStacked
+ strVal = "CylinderBarStacked"
+ Case xlCylinderBarStacked100
+ strVal = "CylinderBarStacked100"
+ Case xlCylinderCol
+ strVal = "CylinderCol"
+ Case xlCylinderColClustered
+ strVal = "CylinderColClustered"
+ Case xlCylinderColStacked
+ strVal = "CylinderColStacked"
+ Case xlCylinderColStacked100
+ strVal = "CylinderColStacked100"
+ Case xlDoughnut
+ strVal = "Doughnut"
+ Case xlLine
+ strVal = "Line"
+ Case xlLineMarkers
+ strVal = "LineMarkers"
+ Case xlLineMarkersStacked
+ strVal = "LineMarkersStacked"
+ Case xlLineMarkersStacked100
+ strVal = "LineMarkersStacked100"
+ Case xlLineStacked
+ strVal = "LineStacked"
+ Case xlLineStacked100
+ strVal = "LineStacked100"
+ Case xlPie
+ strVal = "Pie"
+ Case xlPieExploded
+ strVal = "PieExploded"
+ Case xlPieOfPie
+ strVal = "PieOfPie"
+ Case xlPyramidBarClustered
+ strVal = "PyramidBarClustered"
+ Case xlPyramidBarStacked
+ strVal = "PyramidBarStacked"
+ Case xlPyramidBarStacked100
+ strVal = "PyramidBarStacked100"
+ Case xlPyramidCol
+ strVal = "PyramidCol"
+ Case xlPyramidColClustered
+ strVal = "PyramidColClustered"
+ Case xlPyramidColStacked
+ strVal = "PyramidColStacked"
+ Case xlPyramidColStacked100
+ strVal = "PyramidColStacked100"
+ Case xlRadar
+ strVal = "Radar"
+ Case xlRadarFilled
+ strVal = "RadarFilled"
+ Case xlRadarMarkers
+ strVal = "RadarMarkers"
+ Case xlStockHLC
+ strVal = "StockHLC"
+ Case xlStockOHLC
+ strVal = "StockOHLC"
+ Case xlStockVHLC
+ strVal = "StockVHLC"
+ Case xlStockVOHLC
+ strVal = "StockVOHLC"
+ Case xlSurface
+ strVal = "Surface"
+ Case xlSurfaceTopView
+ strVal = "SurfaceTopView"
+ Case xlSurfaceTopViewWireframe
+ strVal = "SurfaceTopViewWireframe"
+ Case xlSurfaceWireframe
+ strVal = "SurfaceWireframe"
+ Case xlXYScatter
+ strVal = "XYScatter"
+ Case xlXYScatterLines
+ strVal = "XYScatterLines"
+ Case xlXYScatterLinesNoMarkers
+ strVal = "XYScatterLinesNoMarkers"
+ Case xlXYScatterSmooth
+ strVal = "XYScatterSmooth"
+ Case xlXYScatterSmoothNoMarkers
+ strVal = "XYScatterSmoothNoMarkers"
+ Case Else
+ strVal = RID_STR_EXCEL_ENUMERATION_UNKNOWN
+ End Select
+
+ getChartTypeAsString = strVal
+
+ Exit Function
+
+HandleErrors:
+ WriteDebug currentFunctionName & " : " & mAnalysis.name & ": " & Err.Number & " " & Err.Description & " " & Err.Source
+End Function
+
+Sub HandleZoomIssue(currentSheet)
+ Dim myIssue As IssueInfo
+ Dim currentFunctionName As String
+ currentFunctionName = "HandleZoomIssue"
+
+ On Error GoTo HandleErrors
+
+ Set myIssue = New IssueInfo
+ With myIssue
+ .IssueID = CID_FORMAT
+ .IssueType = RID_STR_EXCEL_ISSUE_FORMAT
+ .SubType = RID_STR_EXCEL_SUBISSUE_ZOOM
+ .Location = .CLocationSheet
+ .SubLocation = currentSheet.name
+
+ .IssueTypeXML = CSTR_ISSUE_FORMAT
+ .SubTypeXML = CSTR_SUBISSUE_ZOOM
+ .locationXML = .CXMLLocationSheet
+
+ AddIssueDetailsNote myIssue, 0, RID_STR_EXCEL_NOTE_ZOOM
+ End With
+
+ mAnalysis.IssuesCountArray(CID_FORMAT) = _
+ mAnalysis.IssuesCountArray(CID_FORMAT) + 1
+ mAnalysis.Issues.Add myIssue
+
+FinalExit:
+ Set myIssue = Nothing
+ Exit Sub
+
+HandleErrors:
+ WriteDebug currentFunctionName & " : " & mAnalysis.name & ": " & Err.Number & " " & Err.Description & " " & Err.Source
+ Resume FinalExit
+End Sub
+
+Sub Analyze_SheetDisplay(aWB As Workbook)
+ On Error GoTo HandleErrors
+ Dim currentFunctionName As String
+ currentFunctionName = "Analyze_SheetDisplay"
+
+ If aWB.Sheets.count = 1 Then Exit Sub
+
+ Dim lastZoomVal As Integer
+ Dim bInitZoom As Boolean
+ Dim bZoomChanged As Boolean
+ Dim ws As Object
+
+ bInitZoom = True
+ bZoomChanged = False
+
+ For Each ws In aWB.Sheets
+ ws.Activate
+
+ On Error GoTo HandleErrors
+
+ If bInitZoom Then
+ lastZoomVal = ActiveWindow.Zoom
+ bInitZoom = False
+ ElseIf Not bZoomChanged Then
+ If ActiveWindow.Zoom <> lastZoomVal Then
+ bZoomChanged = True
+ HandleZoomIssue ws
+ End If
+ End If
+ If bZoomChanged Then Exit For
+ Next ws
+
+FinalExit:
+ Exit Sub
+
+HandleErrors:
+ WriteDebug currentFunctionName & " : " & mAnalysis.name & ": " & Err.Number & " " & Err.Description & " " & Err.Source
+ Resume FinalExit
+End Sub
+
+Sub Analyze_SheetLimits(aWB As Workbook)
+ On Error GoTo HandleErrors
+ Dim currentFunctionName As String
+ currentFunctionName = "Analyze_SheetLimits"
+ Dim myIssue As IssueInfo
+
+ If aWB.Sheets.count < CWORKBOOK_SHEETS_LIMIT + 1 Then Exit Sub
+
+ Set myIssue = New IssueInfo
+ With myIssue
+ .IssueID = CID_CONTENT_AND_DOCUMENT_PROPERTIES
+ .IssueType = RID_STR_COMMON_ISSUE_CONTENT_AND_DOCUMENT_PROPERTIES
+ .SubType = RID_STR_EXCEL_SUBISSUE_MAX_SHEETS_EXCEEDED
+ .Location = .CLocationWorkBook
+ .SubLocation = aWB.name
+
+ .IssueTypeXML = CSTR_ISSUE_CONTENT_DOCUMENT_PROPERTIES
+ .SubTypeXML = CSTR_SUBISSUE_MAX_SHEETS_EXCEEDED
+ .locationXML = .CXMLLocationWorkBook
+
+ .Attributes.Add RID_STR_EXCEL_ATTRIBUTE_NUMBER_OF_SHEETS
+ .Values.Add aWB.Sheets.count
+
+ AddIssueDetailsNote myIssue, 0, RID_STR_EXCEL_NOTE_SHEET_LIMITS_1 & CWORKBOOK_SHEETS_LIMIT
+ AddIssueDetailsNote myIssue, 1, RID_STR_EXCEL_NOTE_SHEET_LIMITS_2 & CWORKBOOK_SHEETS_LIMIT
+ End With
+ mAnalysis.IssuesCountArray(CID_CONTENT_AND_DOCUMENT_PROPERTIES) = _
+ mAnalysis.IssuesCountArray(CID_CONTENT_AND_DOCUMENT_PROPERTIES) + 1
+ mAnalysis.Issues.Add myIssue
+ Set myIssue = Nothing
+
+FinalExit:
+ Set myIssue = Nothing
+ Exit Sub
+
+HandleErrors:
+ WriteDebug currentFunctionName & " : " & mAnalysis.name & ": " & Err.Number & " " & Err.Description & " " & Err.Source
+ Resume FinalExit
+End Sub
+
+Sub Analyze_SheetIssues(aWB As Workbook)
+ On Error GoTo HandleErrors
+ Dim currentFunctionName As String
+ currentFunctionName = "Analyze_SheetIssues"
+
+ Dim myWrkSheet As Worksheet
+
+ For Each myWrkSheet In aWB.Worksheets
+ Analyze_OLEEmbedded myWrkSheet
+ Analyze_CellInSheetIssues myWrkSheet
+ Analyze_EmbeddedCharts myWrkSheet
+ Analyze_SheetName myWrkSheet
+ Analyze_QueryTables myWrkSheet
+ Next myWrkSheet
+
+ Exit Sub
+HandleErrors:
+ WriteDebug currentFunctionName & " : " & mAnalysis.name & ": " & Err.Number & " " & Err.Description & " " & Err.Source
+End Sub
+
+Sub Analyze_SheetName(mySheet As Worksheet)
+ On Error GoTo HandleErrors
+ Dim currentFunctionName As String
+ currentFunctionName = "Analyze_SheetName"
+ Dim myIssue As IssueInfo
+ Set myIssue = New IssueInfo
+
+ Dim invalidCharacters As String
+ invalidCharacters = InvalidSheetNameCharacters(mySheet.name)
+ If Len(invalidCharacters) <> 0 Then
+ With myIssue
+ .IssueID = CID_CONTENT_AND_DOCUMENT_PROPERTIES
+ .IssueType = RID_STR_COMMON_ISSUE_CONTENT_AND_DOCUMENT_PROPERTIES
+ .SubType = RID_STR_EXCEL_SUBISSUE_INVALID_WORKSHEET_NAME
+ .Location = .CLocationSheet
+ .SubLocation = mySheet.name
+
+ .IssueTypeXML = CSTR_ISSUE_CONTENT_DOCUMENT_PROPERTIES
+ .SubTypeXML = CSTR_SUBISSUE_INVALID_WORKSHEET_NAME
+ .locationXML = .CXMLLocationSheet
+
+ .Attributes.Add RID_STR_EXCEL_ATTRIBUTE_INVALIDCHARACTER
+ .Values.Add invalidCharacters
+
+ AddIssueDetailsNote myIssue, 0, RID_STR_EXCEL_NOTE_INVALIDWORKSHEETNAME
+
+ mAnalysis.IssuesCountArray(CID_CONTENT_AND_DOCUMENT_PROPERTIES) = _
+ mAnalysis.IssuesCountArray(CID_CONTENT_AND_DOCUMENT_PROPERTIES) + 1
+ End With
+ mAnalysis.Issues.Add myIssue
+ End If
+
+FinalExit:
+ Set myIssue = Nothing
+ Exit Sub
+
+HandleErrors:
+ WriteDebug currentFunctionName & " : " & mAnalysis.name & ": " & Err.Number & " " & Err.Description & " " & Err.Source
+ Resume FinalExit
+End Sub
+
+Function InvalidSheetNameCharacters(aName As String) As String
+ On Error GoTo HandleErrors
+ Dim currentFunctionName As String
+ currentFunctionName = "InvalidSheetNameCharacters"
+
+ Dim I As Integer
+ Dim NameCount As Integer
+ Dim newBadCharLine As String
+ Dim invalidCharacterDetails As String
+ Dim BadCharPosition As String
+ Dim theBadChars As BadSheetNameChar
+ NameCount = Len(aName)
+ invalidCharacterDetails = ""
+ For I = 1 To NameCount
+ theBadChars.BadChar = Mid(aName, I, 1)
+ theBadChars.Position = I
+ BadCharPosition = CStr(theBadChars.Position)
+ Select Case theBadChars.BadChar
+ Case "[", "]", "{", "}", ".", "!", "%", "$", "^", ".", "&", "(", ")", _
+ "-", "=", "+", "~", "#", "@", "'", ";", "<", ">", ",", "|", "`"
+ newBadCharLine = ReplaceTopic2Tokens(RID_STR_EXCEL_ATTRIBUTE_BADCHARACTER, CR_BADCHAR, _
+ theBadChars.BadChar, CR_BADCHARNUM, BadCharPosition)
+ invalidCharacterDetails = invalidCharacterDetails + newBadCharLine + ", "
+ Case Else
+ End Select
+ Next I
+ If Len(invalidCharacterDetails) > 0 Then
+ InvalidSheetNameCharacters = Left(invalidCharacterDetails, (Len(invalidCharacterDetails) - 2))
+ Else
+ InvalidSheetNameCharacters = ""
+ End If
+ Exit Function
+
+HandleErrors:
+ WriteDebug currentFunctionName & " : " & mAnalysis.name & ": " & Err.Number & " " & Err.Description & " " & Err.Source
+
+End Function
+
+Sub Analyze_QueryTables(mySheet As Worksheet)
+ On Error GoTo HandleErrors
+ Dim currentFunctionName As String
+ currentFunctionName = "Analyze_QueryTables"
+
+ Dim aTable As QueryTable
+ Dim myIssue As IssueInfo
+ Set myIssue = New IssueInfo
+
+ For Each aTable In mySheet.QueryTables
+ If (aTable.QueryType = xlADORecordset) Or _
+ (aTable.QueryType = xlDAORecordSet) Or _
+ (aTable.QueryType = xlODBCQuery) Or _
+ (aTable.QueryType = xlOLEDBQuery) Then
+
+ With myIssue
+ .IssueID = CID_CHARTS_TABLES
+ .IssueType = RID_STR_EXCEL_ISSUE_CHARTS_AND_TABLES
+ .SubType = RID_RESXLS_COST_DB_Query
+ .Location = .CLocationSheet
+ .SubLocation = mySheet.name
+
+ .IssueTypeXML = CSTR_ISSUE_CHARTS_TABLES
+ .SubTypeXML = CSTR_SUBISSUE_DB_QUERY
+ .locationXML = .CXMLLocationSheet
+
+ .Attributes.Add RID_STR_EXCEL_ATTRIBUTE_DB_QUERY
+ .Values.Add aTable.Connection
+
+ AddIssueDetailsNote myIssue, 0, RID_STR_EXCEL_NOTE_DB_QUERY
+
+ mAnalysis.IssuesCountArray(CID_CHARTS_TABLES) = _
+ mAnalysis.IssuesCountArray(CID_CHARTS_TABLES) + 1
+ End With
+ mAnalysis.Issues.Add myIssue
+ End If
+ Next aTable
+
+FinalExit:
+ Set myIssue = Nothing
+ Exit Sub
+
+HandleErrors:
+ WriteDebug currentFunctionName & " : " & mAnalysis.name & ": " & Err.Number & " " & Err.Description & " " & Err.Source
+ Resume FinalExit
+End Sub
+
+Sub Analyze_WorkbookVersion(aWB As Workbook)
+ On Error GoTo HandleErrors
+ Dim currentFunctionName As String
+ currentFunctionName = "Analyze_WorkbookVersion"
+ Dim myIssue As IssueInfo
+ Set myIssue = New IssueInfo
+ Dim aProp As Variant
+
+ If IsOldVersion(aWB.FileFormat) Then
+ With myIssue
+ .IssueID = CID_CONTENT_AND_DOCUMENT_PROPERTIES
+ .IssueType = RID_STR_COMMON_ISSUE_CONTENT_AND_DOCUMENT_PROPERTIES
+ .SubType = RID_STR_EXCEL_SUBISSUE_OLD_WORKBOOK_VERSION
+ .Location = .CLocationWorkBook
+
+ .IssueTypeXML = CSTR_ISSUE_CONTENT_DOCUMENT_PROPERTIES
+ .SubTypeXML = CSTR_SUBISSUE_OLD_WORKBOOK_VERSION
+ .locationXML = .CXMLLocationWorkBook
+
+ .Attributes.Add RID_STR_EXCEL_ATTRIBUTE_WORKBOOK_VERSION
+ .Values.Add aWB.FileFormat
+
+ AddIssueDetailsNote myIssue, 0, RID_STR_EXCEL_NOTE_OLDWORKBOOKVERSION
+
+ mAnalysis.IssuesCountArray(CID_CONTENT_AND_DOCUMENT_PROPERTIES) = _
+ mAnalysis.IssuesCountArray(CID_CONTENT_AND_DOCUMENT_PROPERTIES) + 1
+ End With
+ Call DoPreparation(mAnalysis, myIssue, RID_STR_EXCEL_NOTE_OLD_OLDWORKBOOKVERSION_PREPARABLE, aProp, aWB)
+
+ mAnalysis.Issues.Add myIssue
+ End If
+
+FinalExit:
+ Set myIssue = Nothing
+ Exit Sub
+
+HandleErrors:
+ WriteDebug currentFunctionName & " : " & mAnalysis.name & ": " & Err.Number & " " & Err.Description & " " & Err.Source
+ Resume FinalExit
+End Sub
+
+Function getRange(myRange As Range) As String
+ On Error GoTo HandleErrors
+ Dim currentFunctionName As String
+ currentFunctionName = "getRange"
+ getRange = ""
+
+ On Error Resume Next
+ getRange = myRange.Address(RowAbsolute:=False, ColumnAbsolute:=False, ReferenceStyle:=xlA1)
+
+FinalExit:
+ Exit Function
+
+HandleErrors:
+ WriteDebug currentFunctionName & " : myRange.name " & myRange.name & ": " & Err.Number & " " & Err.Description & " " & Err.Source
+ Resume FinalExit
+End Function
+
+Sub Analyze_CellInSheetIssues(mySheet As Worksheet)
+ On Error GoTo HandleErrors
+ Dim currentFunctionName As String
+ currentFunctionName = "Analyze_CellInSheetIssues"
+ Dim myCellRng As Range
+
+ Set myCellRng = mySheet.UsedRange
+ Call CheckAllCellFormatting(myCellRng, mySheet.name)
+ Call CheckAllCellFunctions(myCellRng, mySheet.name)
+
+FinalExit:
+ Exit Sub
+HandleErrors:
+ WriteDebug currentFunctionName & " : " & mAnalysis.name & ": " & Err.Number & " " & Err.Description & " " & Err.Source
+End Sub
+
+Sub CheckAllCellFormatting(CurrRange As Range, myName As String)
+ On Error GoTo HandleErrors
+ Dim currentFunctionName As String
+ currentFunctionName = "CheckAllCellFormatting"
+
+ Dim myCell As Range
+ Dim myCellAttri As CellAtrributes
+ Dim bCellIssue As Boolean
+ Dim bCellIssueAll As Boolean
+ Dim startTime As Single
+
+ bCellIssue = False
+ bCellIssueAll = False
+ startTime = Timer
+
+ For Each myCell In CurrRange
+ bCellIssue = CheckCellFormatting(myCell, myCellAttri)
+ bCellIssueAll = bCellIssueAll Or bCellIssue
+ If (Timer - gExcelMaxRangeProcessTime > startTime) Then
+ WriteDebug currentFunctionName & " : [" & myName & _
+ "]Too much time needed, abortet cell formatting check."
+ Exit For
+ End If
+ Next
+
+FinalExit:
+ If bCellIssueAll Then
+ ReportCellFormattingIssue myName, myCellAttri
+ End If
+
+ Exit Sub
+
+HandleErrors:
+ WriteDebug currentFunctionName & " : " & mAnalysis.name & ": " & Err.Number & " " & Err.Description & " " & Err.Source
+End Sub
+
+Function CheckLineFormatIssue(myRange As Range, edge As XlBordersIndex) As Boolean
+ CheckLineFormatIssue = (myRange.Borders(edge).LineStyle <> xlContinuous) And _
+ (myRange.Borders(edge).LineStyle <> xlDouble) And _
+ (myRange.Borders(edge).LineStyle <> xlLineStyleNone)
+End Function
+
+Private Function CheckCellFormatting(myCell As Range, myCellAttri As CellAtrributes) As Boolean
+ Dim currentFunctionName As String
+ currentFunctionName = "CheckCellFormatting"
+
+ On Error GoTo HandleErrors
+
+ Dim bCellLineFormatIssue As Boolean
+
+ CheckCellFormatting = False
+
+ bCellLineFormatIssue = CheckLineFormatIssue(myCell, xlEdgeBottom) Or _
+ CheckLineFormatIssue(myCell, xlEdgeLeft) Or _
+ CheckLineFormatIssue(myCell, xlEdgeRight) Or _
+ CheckLineFormatIssue(myCell, xlEdgeTop)
+
+ CheckCellFormatting = bCellLineFormatIssue Or _
+ (myCell.Interior.Pattern <> xlPatternSolid And myCell.Interior.Pattern <> xlPatternNone)
+
+ If Not CheckCellFormatting Then Exit Function
+
+ If bCellLineFormatIssue Then
+ myCellAttri.LineStyle = myCellAttri.LineStyle + 1
+ End If
+ If (myCell.Interior.Pattern <> xlPatternSolid And myCell.Interior.Pattern <> xlPatternNone) Then
+ myCellAttri.FillPattern = myCellAttri.FillPattern + 1
+ End If
+
+ Exit Function
+HandleErrors:
+ WriteDebug currentFunctionName & " : " & mAnalysis.name & ": " & Err.Number & " " & Err.Description & " " & Err.Source
+End Function
+
+Private Sub ReportCellFormattingIssue(myName As String, myCellAttri As CellAtrributes)
+ Dim currentFunctionName As String
+ currentFunctionName = "ReportCellFormattingIssue"
+
+ On Error GoTo HandleErrors
+
+ Dim myIssue As IssueInfo
+ Set myIssue = New IssueInfo
+
+ With myIssue
+ .IssueID = CID_FORMAT
+ .IssueType = RID_STR_EXCEL_ISSUE_FORMAT
+ .SubType = RID_STR_EXCEL_SUBISSUE_ATTRIBUTES
+ .Location = .CLocationSheet
+
+ .IssueTypeXML = CSTR_ISSUE_FORMAT
+ .SubTypeXML = CSTR_SUBISSUE_ATTRIBUTES
+ .locationXML = .CXMLLocationSheet
+
+ .SubLocation = myName
+ '.Line = myCell.row
+ '.column = Chr(myCell.column + 65 - 1)
+
+ Dim noteCount As Long
+ noteCount = 0
+
+ If myCellAttri.LineStyle > 0 Then
+ .Attributes.Add RID_STR_EXCEL_ATTRIBUTE_LINE_STYLE
+ .Values.Add RID_STR_EXCEL_ATTRIBUTE_DASHED_DOT
+ .Attributes.Add RID_STR_EXCEL_ATTRIBUTE_NUMBER_OF_CELLS
+ .Values.Add myCellAttri.LineStyle
+ AddIssueDetailsNote myIssue, noteCount, RID_STR_EXCEL_NOTE_CELL_ATTRIBUTES_3
+ noteCount = noteCount + 1
+ End If
+ If myCellAttri.FillPattern > 0 Then
+ .Attributes.Add RID_STR_EXCEL_ATTRIBUTE_FILL_PATTERN
+ .Values.Add RID_STR_EXCEL_ATTRIBUTE_PATTERNED
+ .Attributes.Add RID_STR_EXCEL_ATTRIBUTE_NUMBER_OF_CELLS
+ .Values.Add myCellAttri.FillPattern
+ AddIssueDetailsNote myIssue, noteCount, RID_STR_EXCEL_NOTE_CELL_ATTRIBUTES_4
+ noteCount = noteCount + 1
+ End If
+
+
+ mAnalysis.IssuesCountArray(CID_FORMAT) = _
+ mAnalysis.IssuesCountArray(CID_FORMAT) + 1
+ End With
+
+ mAnalysis.Issues.Add myIssue
+
+FinalExit:
+ Set myIssue = Nothing
+ Exit Sub
+HandleErrors:
+ WriteDebug currentFunctionName & " : " & mAnalysis.name & ": " & Err.Number & " " & Err.Description & " " & Err.Source
+End Sub
+
+Sub CheckAllCellFunctions(CurrRange As Range, myName As String)
+ On Error GoTo HandleErrors
+ Dim currentFunctionName As String
+ currentFunctionName = "CheckAllCellFunctions"
+
+ Dim myCell As Range
+ Dim startTime As Single
+
+ startTime = Timer
+
+ For Each myCell In CurrRange
+ Call CheckCellFunction(myCell, myName)
+ If (Timer - gExcelMaxRangeProcessTime > startTime) Then
+ WriteDebug currentFunctionName & " : [" & myName & _
+ "]Too much time needed, abortet cell functions check (xlCellTypeFormulas)."
+ Exit For
+ End If
+ Next
+
+FinalExit:
+ Exit Sub
+HandleErrors:
+ WriteDebug currentFunctionName & " : " & mAnalysis.name & ": " & Err.Number & " " & Err.Description & " " & Err.Source
+End Sub
+
+Sub CheckCellFunction(myCell As Range, myName As String)
+ Dim currentFunctionName As String
+ currentFunctionName = "CheckCellFunction"
+
+ On Error GoTo HandleErrors
+ Dim bCellFunctionIssue As Boolean
+ Dim bCellINFOFunctionIssue As Boolean
+ Dim bCellERROR_TYPEFunctionIssue As Boolean
+ Dim bCellExternalFunctionIssue As Boolean
+ Dim bHasDateDifFunction As Boolean
+ Dim bHasPhoneticFunction As Boolean
+ Dim aFormularStr As String
+
+ aFormularStr = myCell.FormulaR1C1
+
+ If (aFormularStr = Null) Then Exit Sub
+ If (aFormularStr = "") Then Exit Sub
+
+ bCellINFOFunctionIssue = (InStr(aFormularStr, "INFO(") <> 0)
+ bCellERROR_TYPEFunctionIssue = (InStr(aFormularStr, "ERROR.TYPE(") <> 0)
+ bCellExternalFunctionIssue = (InStr(aFormularStr, ".xls!") <> 0)
+ bHasDateDifFunction = (InStr(aFormularStr, "DATEDIF(") <> 0)
+ bHasPhoneticFunction = (InStr(aFormularStr, "PHONETIC(") <> 0)
+
+ bCellFunctionIssue = bCellINFOFunctionIssue Or bCellERROR_TYPEFunctionIssue _
+ Or bCellExternalFunctionIssue Or bHasDateDifFunction Or bHasPhoneticFunction
+
+ If Not bCellFunctionIssue Then Exit Sub
+
+ Dim myIssue As IssueInfo
+ Set myIssue = New IssueInfo
+
+ With myIssue
+ .IssueID = CID_FUNCTIONS
+ .IssueType = RID_STR_EXCEL_ISSUE_FUNCTIONS
+ .Location = .CLocationSheet
+
+ .IssueTypeXML = CSTR_ISSUE_FUNCTIONS
+ .locationXML = .CXMLLocationSheet
+
+ .SubLocation = myName
+ .Line = myCell.row
+ .column = Chr(myCell.column + 65 - 1)
+
+ Dim noteCount As Long
+ noteCount = 0
+ If bCellINFOFunctionIssue Then
+ .SubTypeXML = CSTR_SUBISSUE_INFO
+ .SubType = RID_STR_EXCEL_SUBISSUE_INFO
+ .Attributes.Add RID_STR_EXCEL_ATTRIBUTE_FUNCTION_STRING
+ .Values.Add myCell.FormulaR1C1
+ AddIssueDetailsNote myIssue, noteCount, RID_STR_EXCEL_NOTE_CELL_FUNCTIONS_1
+ noteCount = noteCount + 1
+ End If
+ If bCellERROR_TYPEFunctionIssue Then
+ .SubTypeXML = CSTR_SUBISSUE_ERROR_TYPE
+ .SubType = RID_STR_EXCEL_SUBISSUE_ERROR_TYPE
+ .Attributes.Add RID_STR_EXCEL_ATTRIBUTE_FUNCTION_STRING
+ .Values.Add myCell.FormulaR1C1
+ AddIssueDetailsNote myIssue, noteCount, RID_STR_EXCEL_NOTE_CELL_FUNCTIONS_2
+ noteCount = noteCount + 1
+ End If
+ If bCellExternalFunctionIssue Then
+ .SubTypeXML = CSTR_SUBISSUE_EXTERNAL
+ .SubType = RID_STR_EXCEL_SUBISSUE_EXTERNAL
+ .Attributes.Add RID_STR_EXCEL_ATTRIBUTE_FUNCTION_STRING
+ .Values.Add myCell.FormulaR1C1
+ AddIssueDetailsNote myIssue, noteCount, RID_STR_EXCEL_NOTE_CELL_FUNCTIONS_3
+ noteCount = noteCount + 1
+ End If
+ If bHasDateDifFunction Then
+ .SubTypeXML = CSTR_SUBISSUE_DATEDIF
+ .SubType = RID_STR_EXCEL_SUBISSUE_DATEDIF
+ .Attributes.Add RID_STR_EXCEL_ATTRIBUTE_FUNCTION_STRING
+ .Values.Add myCell.FormulaR1C1
+ AddIssueDetailsNote myIssue, noteCount, RID_STR_EXCEL_NOTE_CELL_FUNCTIONS_DATEDIF
+ noteCount = noteCount + 1
+ End If
+ If bHasPhoneticFunction Then
+ .SubTypeXML = CSTR_SUBISSUE_PHONETIC
+ .SubType = RID_STR_EXCEL_SUBISSUE_PHONETIC
+ .Attributes.Add RID_STR_EXCEL_ATTRIBUTE_FUNCTION_STRING
+ .Values.Add myCell.FormulaR1C1
+ AddIssueDetailsNote myIssue, noteCount, RID_STR_EXCEL_NOTE_CELL_FUNCTIONS_PHONETIC
+ noteCount = noteCount + 1
+ End If
+
+ mAnalysis.IssuesCountArray(CID_FUNCTIONS) = _
+ mAnalysis.IssuesCountArray(CID_FUNCTIONS) + 1
+ End With
+
+ mAnalysis.Issues.Add myIssue
+
+FinalExit:
+ Set myIssue = Nothing
+ Exit Sub
+HandleErrors:
+ WriteDebug currentFunctionName & " : " & mAnalysis.name & ": " & Err.Number & " " & Err.Description & " " & Err.Source
+End Sub
+
+Sub Analyze_Password_Protection(aWB As Workbook)
+ On Error GoTo HandleErrors
+ Dim currentFunctionName As String
+ currentFunctionName = "Analyze_Password_Protection"
+ Dim myIssue As IssueInfo
+ Set myIssue = New IssueInfo
+
+ If aWB.HasPassword Or aWB.WriteReserved Then
+ With myIssue
+ .IssueID = CID_CONTENT_AND_DOCUMENT_PROPERTIES
+ .IssueType = RID_STR_COMMON_ISSUE_CONTENT_AND_DOCUMENT_PROPERTIES
+ .SubType = RID_STR_COMMON_SUBISSUE_PASSWORDS_PROTECTION
+
+ .IssueTypeXML = CSTR_ISSUE_CONTENT_DOCUMENT_PROPERTIES
+ .SubTypeXML = CSTR_SUBISSUE_PASSWORD_PROTECTION
+ .locationXML = .CLocationWorkBook
+
+ .Location = .CLocationWorkBook
+
+ If aWB.HasPassword Then
+ .Attributes.Add RID_STR_EXCEL_ATTRIBUTE_PASSWORD_TO_OPEN
+ .Values.Add RID_STR_EXCEL_ATTRIBUTE_SET
+ End If
+ If aWB.WriteReserved Then
+ .Attributes.Add RID_STR_EXCEL_ATTRIBUTE_PASSWORD_TO_MODIFY
+ .Values.Add RID_STR_EXCEL_ATTRIBUTE_SET
+ End If
+
+ mAnalysis.IssuesCountArray(CID_CONTENT_AND_DOCUMENT_PROPERTIES) = _
+ mAnalysis.IssuesCountArray(CID_CONTENT_AND_DOCUMENT_PROPERTIES) + 1
+ End With
+
+ mAnalysis.Issues.Add myIssue
+ End If
+
+FinalExit:
+ Set myIssue = Nothing
+ Exit Sub
+HandleErrors:
+ WriteDebug currentFunctionName & " : " & mAnalysis.name & ": " & Err.Number & " " & Err.Description & " " & Err.Source
+ Resume FinalExit
+End Sub
+
+Sub SetDocProperties(docAnalysis As DocumentAnalysis, wb As Workbook, fso As FileSystemObject)
+ On Error GoTo HandleErrors
+ Dim currentFunctionName As String
+ currentFunctionName = "SetProperties"
+ Dim f As File
+ Set f = fso.GetFile(docAnalysis.name)
+
+ Const appPropertyAppName = 9
+ Const appPropertyLastAuthor = 7
+ Const appPropertyRevision = 8
+ Const appPropertyTemplate = 6
+ Const appPropertyTimeCreated = 11
+ Const appPropertyTimeLastSaved = 12
+
+ On Error Resume Next
+ docAnalysis.PageCount = wb.Sheets.count
+ docAnalysis.Created = f.DateCreated
+ docAnalysis.Modified = f.DateLastModified
+ docAnalysis.Accessed = f.DateLastAccessed
+ docAnalysis.Printed = DateValue("01/01/1900")
+ On Error GoTo HandleErrors
+
+ On Error Resume Next 'Some apps may not support all props
+ docAnalysis.Application = getAppSpecificApplicationName & " " & Application.Version
+ 'docAnalysis.Application = wb.BuiltinDocumentProperties(appPropertyAppName)
+ 'If InStr(docAnalysis.Application, "Microsoft") = 1 Then
+ ' docAnalysis.Application = Mid(docAnalysis.Application, Len("Microsoft") + 2)
+ 'End If
+ 'If InStr(Len(docAnalysis.Application) - 2, docAnalysis.Application, ".") = 0 Then
+ ' docAnalysis.Application = docAnalysis.Application & " " & Application.Version
+ 'End If
+
+ docAnalysis.SavedBy = _
+ wb.BuiltinDocumentProperties(appPropertyLastAuthor)
+ docAnalysis.Revision = _
+ val(wb.BuiltinDocumentProperties(appPropertyRevision))
+ docAnalysis.Template = _
+ fso.GetFileName(wb.BuiltinDocumentProperties(appPropertyTemplate))
+ docAnalysis.Modified = _
+ wb.BuiltinDocumentProperties(appPropertyTimeLastSaved)
+
+FinalExit:
+ Set f = Nothing
+ Exit Sub
+
+HandleErrors:
+ WriteDebug currentFunctionName & " : " & mAnalysis.name & ": " & Err.Number & " " & Err.Description & " " & Err.Source
+ Resume FinalExit
+End Sub
+
+Sub Analyze_OLEEmbedded(wrkSheet As Worksheet)
+ On Error GoTo HandleErrors
+ Dim currentFunctionName As String
+ currentFunctionName = "Analyze_OLEEmbedded"
+
+ ' Handle Shapes
+ Dim aShape As Shape
+ For Each aShape In wrkSheet.Shapes
+ Analyze_OLEEmbeddedSingleShape mAnalysis, aShape, wrkSheet.name
+ Analyze_Lines mAnalysis, aShape, wrkSheet.name
+ Analyze_Transparency mAnalysis, aShape, wrkSheet.name
+ Analyze_Gradients mAnalysis, aShape, wrkSheet.name
+ Next aShape
+
+ Exit Sub
+
+HandleErrors:
+ WriteDebug currentFunctionName & " : " & mAnalysis.name & ": " & Err.Number & " " & Err.Description & " " & Err.Source
+End Sub
+
+Sub Analyze_Workbook_Protection(aWB As Workbook)
+ On Error GoTo HandleErrors
+ Dim currentFunctionName As String
+ currentFunctionName = "Analyze_Workbook_Protection"
+ Dim myIssue As IssueInfo
+ Set myIssue = New IssueInfo
+ Dim bProtectSharing As Boolean
+ Dim bProtectStructure As Boolean
+ Dim bProtectWindows As Boolean
+
+ bProtectSharing = False
+ bProtectStructure = False
+ bProtectWindows = False
+
+ If Not WorkbookProtectTest(aWB, bProtectSharing, bProtectStructure, bProtectWindows) Then
+ GoTo FinalExit
+ End If
+
+ Set myIssue = New IssueInfo
+ With myIssue
+ .IssueID = CID_CONTENT_AND_DOCUMENT_PROPERTIES
+ .IssueType = RID_STR_COMMON_ISSUE_CONTENT_AND_DOCUMENT_PROPERTIES
+ .SubType = RID_STR_EXCEL_SUBISSUE_WORKBOOK_PROTECTION
+ .Location = .CLocationWorkBook
+
+ .IssueTypeXML = CSTR_ISSUE_CONTENT_DOCUMENT_PROPERTIES
+ .SubTypeXML = CSTR_SUBISSUE_WORKBOOK_PROTECTION
+ .locationXML = .CXMLLocationWorkBook
+
+ If bProtectSharing Then
+ .Attributes.Add RID_STR_EXCEL_ATTRIBUTE_PROTECT_TYPE_SHARING
+ .Values.Add RID_STR_EXCEL_ATTRIBUTE_SET
+ End If
+ If bProtectStructure Then
+ .Attributes.Add RID_STR_EXCEL_ATTRIBUTE_PROTECT_TYPE_STRUCTURE
+ .Values.Add RID_STR_EXCEL_ATTRIBUTE_SET
+ End If
+ If bProtectWindows Then
+ .Attributes.Add RID_STR_EXCEL_ATTRIBUTE_PROTECT_TYPE_WINDOWS
+ .Values.Add RID_STR_EXCEL_ATTRIBUTE_SET
+ End If
+
+ AddIssueDetailsNote myIssue, 0, RID_STR_EXCEL_NOTE_PASSWORD_TO_OPEN
+ mAnalysis.IssuesCountArray(CID_CONTENT_AND_DOCUMENT_PROPERTIES) = _
+ mAnalysis.IssuesCountArray(CID_CONTENT_AND_DOCUMENT_PROPERTIES) + 1
+ End With
+
+ mAnalysis.Issues.Add myIssue
+
+FinalExit:
+ Set myIssue = Nothing
+ Exit Sub
+
+HandleErrors:
+ WriteDebug currentFunctionName & " : " & mAnalysis.name & ": " & Err.Number & " " & Err.Description & " " & Err.Source
+ Resume FinalExit
+
+End Sub
+
+Private Function WorkbookProtectTest(aWB As Workbook, bProtectSharing As Boolean, _
+ bProtectStructure As Boolean, bProtectWindows As Boolean) As Boolean
+ On Error GoTo HandleErrors
+ Dim currentFunctionName As String
+ currentFunctionName = "WorkbookProtectTest"
+
+ WorkbookProtectTest = False
+
+ On Error Resume Next 'Simulate Try Catch
+ aWB.UnprotectSharing sharingPassword:=" "
+ If Err.Number = 1004 Then
+ bProtectSharing = True
+ ElseIf Err.Number <> 0 Then
+ Resume HandleErrors
+ End If
+ On Error GoTo HandleErrors
+
+ On Error Resume Next 'Simulate Try Catch
+ aWB.Unprotect Password:=""
+ If Err.Number = 1004 Then
+ If aWB.ProtectStructure = True Then
+ bProtectStructure = True
+ End If
+ If aWB.ProtectWindows = True Then
+ bProtectWindows = True
+ End If
+ End If
+
+ If bProtectSharing Or bProtectStructure Or bProtectWindows Then
+ WorkbookProtectTest = True
+ End If
+FinalExit:
+ Exit Function
+
+HandleErrors:
+ WriteDebug currentFunctionName & " : " & mAnalysis.name & ": " & Err.Number & " " & Err.Description & " " & Err.Source
+ Resume FinalExit
+
+End Function
+
+Private Sub Class_Initialize()
+ Set mAnalysis = New DocumentAnalysis
+End Sub
+Private Sub Class_Terminate()
+ Set mAnalysis = Nothing
+End Sub
+
+Public Property Get Results() As DocumentAnalysis
+ Set Results = mAnalysis
+End Property
+Private Function FormatIssueComplex(myChart As Chart, bDataTable As Boolean, bXAxes As Boolean) As Boolean
+ On Error GoTo HandleErrors
+ Dim currentFunctionName As String
+ currentFunctionName = "FormatIssueComplex"
+
+ bXAxes = False
+
+ If myChart.HasDataTable Then
+ bDataTable = True
+ End If
+ If Not (IsPie(myChart) Or myChart.ChartType = xlDoughnut Or myChart.ChartType = xlBubble3DEffect) Then
+ If myChart.HasAxis(1) Then
+ If myChart.Axes(1).CategoryType = xlTimeScale Or myChart.Axes(1).CategoryType = xlAutomaticScale Then
+ bXAxes = True
+ End If
+ End If
+ End If
+ If bDataTable Or bXAxes Then
+ FormatIssueComplex = True
+ End If
+ Exit Function
+HandleErrors:
+ WriteDebug currentFunctionName & " : " & mAnalysis.name & ": " & Err.Number & " " & Err.Description & " " & Err.Source
+End Function
+
+Private Function IsAreaChart(myChart As Chart) As Boolean
+
+ If (myChart.ChartType = xlArea Or myChart.ChartType = xl3DArea Or _
+ myChart.ChartType = xlAreaStacked Or _
+ myChart.ChartType = xl3DAreaStacked Or _
+ myChart.ChartType = xlAreaStacked100 Or _
+ myChart.ChartType = xl3DAreaStacked100) _
+ Then
+ IsAreaChart = True
+ Else
+ IsAreaChart = False
+ End If
+
+End Function
+
+Private Function FormatissueMinor(myChart As Chart, bUnsupportedType As Boolean, bTrendline As Boolean, bDatalabelWithLegend As Boolean, bLegendPosition As Boolean, bTitleFont As Boolean, bPiechartDirection As Boolean, bAxisInterval As Boolean) As Boolean
+On Error GoTo HandleErrors
+Dim currentFunctionName As String
+currentFunctionName = "FormatissueMinor"
+
+Dim ctype As Integer
+Dim fsize As Integer
+Dim se As Series
+Dim dl As DataLabel
+
+ FormatissueMinor = False
+ ctype = myChart.ChartType
+
+ If (ctype = xlBubble Or ctype = xlPieOfPie Or ctype = xl3DPieExploded _
+ Or ctype = xlRadarFilled Or ctype = xlBubble3DEffect _
+ Or ctype = xlRadarMarkers Or ctype = xlRadar Or ctype = xlBarOfPie _
+ Or ctype = xlXYScatter Or ctype = xlXYScatterLines Or ctype = xlXYScatterLinesNoMarkers _
+ Or ctype = xlXYScatterSmooth Or ctype = xlXYScatterSmoothNoMarkers _
+ Or ctype = xlSurface Or ctype = xlSurfaceTopView Or ctype = xlSurfaceTopViewWireframe _
+ Or ctype = xlSurfaceWireframe) Then
+ bUnsupportedType = True
+ End If
+
+ For Each se In myChart.SeriesCollection
+ On Error Resume Next ' may not have trendlines property
+ If se.Trendlines.count <> 0 Then
+ If Err.Number = 0 Then
+ bTrendline = True
+ End If
+ End If
+ If se.HasDataLabels Then
+ If Err.Number = 0 Then
+ If (IsAreaChart(myChart)) Then
+ For Each dl In se.DataLabels
+ If dl.ShowLegendKey = True Then
+ bDatalabelWithLegend = True
+ Exit For
+ End If
+ Next dl
+ Else
+ Dim pt As Point
+ For Each pt In se.Points
+ If pt.HasDataLabel Then
+ If pt.DataLabel.ShowLegendKey Then
+ bDatalabelWithLegend = True
+ Exit For
+ End If
+ End If
+ Next pt
+ End If
+ End If
+ End If
+ On Error GoTo HandleErrors
+ If bTrendline And bDatalabelWithLegend Then
+ Exit For
+ End If
+ Next se
+
+ If myChart.HasLegend Then
+ Dim legPos As Long
+ On Error Resume Next 'If legend moved accessing position will fail
+ legPos = myChart.Legend.Position
+
+ If (Err.Number <> 0) Or (legPos <> xlLegendPositionRight) Then
+ bLegendPosition = True
+ End If
+ On Error GoTo HandleErrors
+ End If
+
+ If IsPie(myChart) Then
+ bPiechartDirection = True
+ ElseIf myChart.ChartType <> xlDoughnut And myChart.ChartType <> xlBubble3DEffect Then
+ If myChart.HasAxis(xlValue, xlPrimary) Then
+ With myChart.Axes(xlValue, xlPrimary)
+ If .MajorUnitIsAuto And .MaximumScaleIsAuto And .MinimumScaleIsAuto And .MinorUnitIsAuto Then
+ bAxisInterval = True
+ End If
+ End With
+ End If
+ End If
+
+ On Error Resume Next 'If title has mixed font size accessing Font.Size will fail - Title mixed font issue
+ If myChart.HasTitle Then
+ fsize = myChart.chartTitle.Font.Size
+ If Err.Number = FontError Then
+ bTitleFont = True
+ End If
+ End If
+
+ On Error GoTo HandleErrors
+ If bUnsupportedType Or bTrendline Or bDatalabelWithLegend Or bLegendPosition Or bTitleFont Or bPiechartDirection Or bAxisInterval Then
+ FormatissueMinor = True
+ End If
+
+FinalExit:
+
+ Set se = Nothing
+ Set dl = Nothing
+ Exit Function
+
+HandleErrors:
+
+ WriteDebug currentFunctionName & " : " & mAnalysis.name & ": " & Err.Number & " " & Err.Description & " " & Err.Source
+ Resume FinalExit
+
+End Function
+
+Private Function SeriesIssue(myChart As Chart, bSeriesChartTypeChanged As Boolean, bDatasourceNotLinkedtoCell As Boolean, bDatasourceOnDifferentSheet As Boolean, bCategoryandValue As Boolean, bCLabelMorethanOneCell As Boolean, bOneColumnRow As Boolean) As Boolean
+On Error GoTo HandleErrors
+Dim currentFunctionName As String
+currentFunctionName = "SeriesIssue"
+SeriesIssue = False
+
+Dim Num As Integer
+Dim I As Integer
+Dim i2 As Integer
+Dim formula As String
+Dim p1 As Integer, p2 As Integer
+Dim b1 As Integer, b2 As Integer
+Dim comma1 As Integer, comma2 As Integer
+Dim starty As Integer
+Dim ctype As Integer
+Dim temp As Integer
+Dim myarray() As String
+Dim Values(3), sh
+Dim chartseries As Series
+Dim b As Boolean
+Dim bmorecolumns As Boolean
+Dim c As Boolean
+
+bmorecolumns = False
+Num = myChart.SeriesCollection.count
+
+If (Num = 0) Then Exit Function
+
+ctype = myChart.SeriesCollection(1).ChartType
+I = 0
+sh = ""
+
+ReDim Preserve myarray(Num, 3)
+
+If IsPie(myChart) And Num > 1 Then 'if pie chart has more than one series,set series number to 1
+ bmorecolumns = True
+ Num = 1
+End If
+For Each chartseries In myChart.SeriesCollection
+ On Error Resume Next
+ formula = chartseries.formula
+ If Err.Number <> 0 Then
+ GoTo FinalExit
+ End If
+ If Not bSeriesChartTypeChanged Then 'check if the chart type changed
+ temp = chartseries.ChartType
+ If temp <> ctype Then
+ bSeriesChartTypeChanged = True
+ End If
+ End If
+
+ 'get each part of the formula, if it is a single range, set the value to the array
+ p1 = InStr(1, formula, "(")
+ comma1 = InStr(1, formula, ",")
+ Values(0) = Mid(formula, p1 + 1, comma1 - p1 - 1)
+
+ If Mid(formula, comma1 + 1, 1) = "(" Then
+' Multiple ranges
+ bDatasourceNotLinkedtoCell = True
+ GoTo FinalExit
+ Else
+ If Mid(formula, comma1 + 1, 1) = "{" Then
+' Literal Array
+ bDatasourceNotLinkedtoCell = True
+ GoTo FinalExit
+ Else
+' A single range
+ comma2 = InStr(comma1 + 1, formula, ",")
+ Values(1) = Mid(formula, comma1 + 1, comma2 - comma1 - 1)
+ starty = comma2
+ End If
+ End If
+
+ If Mid(formula, starty + 1, 1) = "(" Then
+' Multiple ranges
+ bDatasourceNotLinkedtoCell = True
+ GoTo FinalExit
+ Else
+ If Mid(formula, starty + 1, 1) = "{" Then
+' Literal Array
+ bDatasourceNotLinkedtoCell = True
+ GoTo FinalExit
+ Else
+' A single range
+ comma1 = starty
+ comma2 = InStr(comma1 + 1, formula, ",")
+ Values(2) = Mid(formula, comma1 + 1, comma2 - comma1 - 1)
+ End If
+ End If
+
+ If SheetCheck(sh, Values) Then 'check if data from different sheet
+ bDatasourceOnDifferentSheet = True
+ GoTo FinalExit
+ End If
+
+ For i2 = 0 To 2 'set data to myarray, if it is range, assign the range address, else null
+ If IsRange(Values(i2)) Then
+ myarray(I, i2) = Range(Values(i2)).Address
+ 'ElseIf (Not IsRange(values(i2))) And values(i2) <> "" Then
+ ' bDatasourceNotLinkedtoCell = True
+ ' myarray(i, i2) = ""
+ Else
+ bDatasourceNotLinkedtoCell = True
+ myarray(I, i2) = ""
+ End If
+ Next i2
+
+ I = I + 1
+ If bmorecolumns Then 'if it is pie chart, exit
+ Exit For
+ End If
+Next chartseries
+
+
+c = DataCheck(myarray, Num, bCategoryandValue, bCLabelMorethanOneCell, bOneColumnRow) 'check data values and category of the chart
+
+FinalExit:
+If bSeriesChartTypeChanged Or bDatasourceNotLinkedtoCell Or bDatasourceOnDifferentSheet Or bCategoryandValue Or bCLabelMorethanOneCell Or bOneColumnRow Then
+ SeriesIssue = True
+End If
+
+Last:
+ Set chartseries = Nothing
+ Exit Function
+
+HandleErrors:
+ WriteDebug currentFunctionName & " : " & mAnalysis.name & ": " & Err.Number & " " & Err.Description & " " & Err.Source
+ Resume Last
+End Function
+
+Private Function DataCheck(myarray() As String, Num As Integer, bCategoryandValue As Boolean, bCLabelMorethanOneCell As Boolean, bOneColumnRow As Boolean)
+On Error GoTo HandleErrors
+Dim currentFunctionName As String
+currentFunctionName = "DataCheck"
+
+Dim s1() As String
+Dim v1() As String
+Dim v2() As String
+Dim c1() As String
+Dim c2() As String
+Dim bs1isrange As Boolean
+Dim bc1isrange As Boolean
+Dim bc2isrange As Boolean
+Dim j As Integer
+Dim I As Integer
+Dim btemp1 As Boolean
+Dim btemp2 As Boolean
+
+
+bs1isrange = True
+bc1isrange = True
+bc2isrange = True
+
+If myarray(0, 1) = "" Then
+ bs1isrange = False
+Else
+ s1 = SplitRange(myarray(0, 1))
+ If UBound(s1) < 4 Then
+ bOneColumnRow = True
+ GoTo FinalExit
+ End If
+ If (Asclong(s1(0)) <> Asclong(s1(2))) And (Asclong(s1(1)) <> Asclong(s1(3))) Then
+ bCLabelMorethanOneCell = True
+ GoTo FinalExit
+ End If
+
+End If
+
+If myarray(0, 0) = "" Then
+ ReDim c1(2)
+ bc1isrange = False
+ c1(0) = ""
+ c1(1) = ""
+Else
+ If InStr(1, myarray(0, 0), ":") <> 0 Then
+ bCLabelMorethanOneCell = True
+ GoTo FinalExit
+ End If
+ c1 = SplitRange(myarray(0, 0))
+End If
+v1 = SplitRange(myarray(0, 2))
+
+If bs1isrange Then
+ btemp1 = s1(0) = s1(2) And s1(1) = v1(1) And s1(3) = v1(3) And Asclong(v1(0)) >= Asclong(s1(0)) + 1 'category beside first column
+ btemp2 = s1(1) = s1(3) And s1(0) = v1(0) And s1(2) = v1(2) And Asclong(v1(1)) >= Asclong(s1(1)) + 1 'category beside first row
+ If (Not btemp1) And (Not btemp2) Then
+ bCategoryandValue = True
+ GoTo FinalExit
+ End If
+End If
+If bc1isrange Then
+ btemp1 = v1(0) = v1(2) And c1(0) = v1(0) And Asclong(c1(1)) <= Asclong(v1(1)) - 1 'data label beside row
+ btemp2 = v1(1) = v1(3) And c1(1) = v1(1) And Asclong(c1(0)) <= Asclong(v1(0)) - 1 'data label beside column
+ If (Not btemp1) And (Not btemp2) Then
+ bCategoryandValue = True
+ GoTo FinalExit
+ End If
+End If
+For I = 1 To Num - 1
+ If myarray(I, 0) = "" Then
+ ReDim c2(2)
+ c2(0) = ""
+ c2(1) = ""
+ bc2isrange = False
+ Else
+ If InStr(1, myarray(0, 1), ":") = 0 Then
+ bCLabelMorethanOneCell = True
+ GoTo FinalExit
+ End If
+ c2 = SplitRange(myarray(I, 0))
+ End If
+ v2 = SplitRange(myarray(I, 2))
+ If bc2isrange Then
+ btemp1 = v1(0) = v1(2) And c2(0) = v2(0) And Asclong(c2(1)) <= Asclong(v2(1)) - 1 'data label beside row
+ btemp2 = v2(1) = v2(3) And c2(1) = v2(1) And Asclong(c2(0)) <= Asclong(v2(0)) - 1 'data label beside column
+ If (Not btemp1) And (Not btemp2) Then
+ bCategoryandValue = True
+ GoTo FinalExit
+ 'break
+ End If
+ End If
+ If bc1isrange And bc2isrange Then
+ 'series data beside last series data in column and data label beside last series data label
+ btemp1 = v2(0) = v2(2) And Asclong(c2(0)) = Asclong(c1(0)) + 1 And c2(1) = c1(1) And Asclong(v2(0)) = Asclong(v1(0)) + 1 And v1(1) = v2(1) And v1(3) = v2(3)
+ 'series data beside last series data in row and data label beside laast series data label
+ btemp2 = v2(1) = v2(3) And c1(0) = c2(0) And Asclong(c2(1)) = Asclong(c1(1)) + 1 And Asclong(v2(1)) = Asclong(v1(1)) + 1 And v1(0) = v2(0) And v1(2) = v2(2)
+ If (Not btemp1) And (Not btemp2) Then
+ bCategoryandValue = True
+ GoTo FinalExit
+ End If
+ ElseIf Not bc2isrange Then
+ btemp1 = v2(0) = v2(2) And Asclong(v2(0)) = Asclong(v1(0)) + 1 And v1(1) = v2(1) And v1(3) = v2(3) 'series data beside last series data in column
+ btemp2 = v2(1) = v2(3) And Asclong(v2(1)) = Asclong(v1(1)) + 1 And v1(0) = v2(0) And v1(2) = v2(2) 'series data beside last series data in row
+ If (Not btemp1) And (Not btemp2) Then
+ bCategoryandValue = True
+ GoTo FinalExit
+ End If
+ End If
+ For j = 0 To 1
+ c1(j) = c2(j)
+ Next j
+ For j = 0 To 3
+ v1(j) = v2(j)
+ Next j
+ bc1isrange = bc2isrange
+ bc2isrange = True
+
+Next I
+FinalExit:
+Exit Function
+HandleErrors:
+ WriteDebug currentFunctionName & " : " & mAnalysis.name & ": " & Err.Number & " " & Err.Description & " " & Err.Source
+End Function
+Private Function SplitRange(a As String) As String()
+On Error GoTo HandleErrors
+Dim currentFunctionName As String
+currentFunctionName = "SplitRange"
+
+Dim c1 As Integer, c2 As Integer, c3 As Integer
+Dim start As Integer
+Dim l As Integer
+Dim rearray() As String
+
+start = 2
+If a <> "" Then
+ l = InStr(1, a, ":")
+ If l = 0 Then
+ ReDim rearray(2)
+ c1 = InStr(start, a, "$")
+ rearray(0) = Mid(a, start, c1 - start)
+ rearray(1) = Mid(a, c1 + 1, Len(a) - c1)
+ Else
+ ReDim rearray(4)
+ c1 = InStr(start, a, "$")
+ rearray(0) = Mid(a, start, c1 - start)
+ c2 = InStr(c1 + 1, a, "$")
+ rearray(1) = Mid(a, c1 + 1, c2 - c1 - 2)
+ c3 = InStr(c2 + 1, a, "$")
+ rearray(2) = Mid(a, c2 + 1, c3 - c2 - 1)
+ rearray(3) = Mid(a, c3 + 1, Len(a) - c3)
+ End If
+Else
+ ReDim rearray(4)
+ rearray(0) = ""
+ rearray(1) = ""
+ rearray(2) = ""
+ rearray(3) = ""
+End If
+SplitRange = rearray
+
+Exit Function
+HandleErrors:
+ WriteDebug currentFunctionName & " : " & mAnalysis.name & ": " & Err.Number & " " & Err.Description & " " & Err.Source
+End Function
+Private Function Asclong(s As String) As Integer
+On Error GoTo HandleErrors
+Dim currentFunctionName As String
+currentFunctionName = "Asclong"
+Asclong = 0
+
+Dim l As Integer
+Dim I As Integer
+Dim m As String
+
+l = Len(s)
+
+For I = 1 To l
+ m = Mid(s, I, 1)
+ Asclong = Asclong + Asc(m)
+Next I
+Exit Function
+
+HandleErrors:
+ WriteDebug currentFunctionName & " : " & mAnalysis.name & ": " & Err.Number & " " & Err.Description & " " & Err.Source
+End Function
+Private Function SheetCheck(sh As Variant, Values() As Variant) As Boolean
+On Error GoTo HandleErrors
+Dim currentFunctionName As String
+currentFunctionName = "SheetCheck"
+SheetCheck = False
+
+Dim c1 As Integer
+Dim I As Integer
+
+Dim temp
+
+For I = 0 To 2
+ If IsRange(Values(I)) Then
+ c1 = InStr(1, Values(I), "!")
+ If sh = "" Then
+ sh = Mid(Values(I), 1, c1 - 1)
+ temp = Mid(Values(I), 1, c1 - 1)
+ Else
+ temp = Mid(Values(I), 1, c1 - 1)
+ End If
+ If temp <> sh Then
+ SheetCheck = True
+ Exit Function
+ End If
+ End If
+Next I
+Exit Function
+
+HandleErrors:
+ WriteDebug currentFunctionName & " : " & mAnalysis.name & ": " & Err.Number & " " & Err.Description & " " & Err.Source
+End Function
+Private Function IsRange(Ref) As Boolean
+On Error GoTo HandleErrors
+Dim currentFunctionName As String
+currentFunctionName = "IsRange"
+
+Dim x As Range
+
+On Error Resume Next
+Set x = Range(Ref)
+If Err = 0 Then
+ IsRange = True
+Else
+ IsRange = False
+End If
+FinalExit:
+ Set x = Nothing
+ Exit Function
+
+HandleErrors:
+ WriteDebug currentFunctionName & " : " & mAnalysis.name & ": " & Err.Number & " " & Err.Description & " " & Err.Source
+ Resume FinalExit
+End Function
+Private Function IsPie(myChart As Chart) As Boolean
+On Error GoTo HandleErrors
+Dim currentFunctionName As String
+currentFunctionName = "IsPie"
+Dim ctype As Integer
+ IsPie = False
+
+ ctype = myChart.ChartType
+ If (ctype = xlPie) Or _
+ (ctype = xlPieExploded) Or _
+ (ctype = xlPieOfPie) Or _
+ (ctype = xl3DPie) Or _
+ (ctype = xl3DPieExploded) Then
+
+ IsPie = True
+ End If
+ Exit Function
+
+HandleErrors:
+ WriteDebug currentFunctionName & " : " & mAnalysis.name & ": " & Err.Number & " " & Err.Description & " " & Err.Source
+End Function
+
+Private Function IsOldVersion(aFormat As XlFileFormat) As Boolean
+ Dim theResult As Boolean
+ Dim currentFunctionName As String
+ currentFunctionName = "IsOldVersion"
+
+ Select Case aFormat
+ Case xlExcel2, xlExcel2FarEast, xlExcel3, xlExcel4, xlExcel4Workbook, xlExcel5, xlExcel7
+ theResult = True
+ Case xlExcel9795, xlWorkbookNormal
+ theResult = False
+ Case Else
+ WriteDebug currentFunctionName & " : " & mAnalysis.name & ": The version of this spreadsheet is not recognised"
+ End Select
+
+ IsOldVersion = theResult
+End Function
+
+
diff --git a/migrationanalysis/src/driver_docs/sources/excel/Preparation.bas b/migrationanalysis/src/driver_docs/sources/excel/Preparation.bas
new file mode 100644
index 000000000000..d2d4ed82ee68
--- /dev/null
+++ b/migrationanalysis/src/driver_docs/sources/excel/Preparation.bas
@@ -0,0 +1,53 @@
+Attribute VB_Name = "Preparation"
+'/*************************************************************************
+' *
+' * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+' *
+' * Copyright 2008 by Sun Microsystems, Inc.
+' *
+' * OpenOffice.org - a multi-platform office productivity suite
+' *
+' * $RCSfile: Preparation.bas,v $
+' *
+' * This file is part of OpenOffice.org.
+' *
+' * OpenOffice.org is free software: you can redistribute it and/or modify
+' * it under the terms of the GNU Lesser General Public License version 3
+' * only, as published by the Free Software Foundation.
+' *
+' * OpenOffice.org is distributed in the hope that it will be useful,
+' * but WITHOUT ANY WARRANTY; without even the implied warranty of
+' * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+' * GNU Lesser General Public License version 3 for more details
+' * (a copy is included in the LICENSE file that accompanied this code).
+' *
+' * You should have received a copy of the GNU Lesser General Public License
+' * version 3 along with OpenOffice.org. If not, see
+' * <http://www.openoffice.org/license.html>
+' * for a copy of the LGPLv3 License.
+' *
+' ************************************************************************/
+
+Option Explicit
+
+'Stub for Word Prepare H&F
+Function Prepare_HeaderFooter_GraphicFrames(docAnalysis As DocumentAnalysis, myIssue As IssueInfo, _
+ var As Variant, currDoc As Workbook) As Boolean
+ Prepare_HeaderFooter_GraphicFrames = False
+End Function
+
+Function Prepare_WorkbookVersion() As Boolean
+
+ ' **************************************************************************
+ ' Because the workbook version is changed when the workbook is being saved,
+ ' the actual preparation for this issue is done in the sub DoAnalyze of
+ ' the class module MigrationAnalyser when the prepared workbook is saved.
+ ' The reason for having this function is more for documentation/structural
+ ' purposes rather than actually needing the function.
+ ' **************************************************************************
+
+ Prepare_WorkbookVersion = True
+
+End Function
+
+
diff --git a/migrationanalysis/src/driver_docs/sources/excel/SetTextBoxFont.bas b/migrationanalysis/src/driver_docs/sources/excel/SetTextBoxFont.bas
new file mode 100644
index 000000000000..16c4194e1ccb
--- /dev/null
+++ b/migrationanalysis/src/driver_docs/sources/excel/SetTextBoxFont.bas
@@ -0,0 +1,52 @@
+Attribute VB_Name = "SetTextBoxFont"
+'/*************************************************************************
+' *
+' * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+' *
+' * Copyright 2008 by Sun Microsystems, Inc.
+' *
+' * OpenOffice.org - a multi-platform office productivity suite
+' *
+' * $RCSfile: SetTextBoxFont.bas,v $
+' *
+' * This file is part of OpenOffice.org.
+' *
+' * OpenOffice.org is free software: you can redistribute it and/or modify
+' * it under the terms of the GNU Lesser General Public License version 3
+' * only, as published by the Free Software Foundation.
+' *
+' * OpenOffice.org is distributed in the hope that it will be useful,
+' * but WITHOUT ANY WARRANTY; without even the implied warranty of
+' * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+' * GNU Lesser General Public License version 3 for more details
+' * (a copy is included in the LICENSE file that accompanied this code).
+' *
+' * You should have received a copy of the GNU Lesser General Public License
+' * version 3 along with OpenOffice.org. If not, see
+' * <http://www.openoffice.org/license.html>
+' * for a copy of the LGPLv3 License.
+' *
+' ************************************************************************/
+
+Option Explicit
+
+' We change the font used for text box shapes here for the japanese
+' version, because office 2000 sometimes displays squares instead of
+' chars
+Public Sub SetTextBoxFont()
+ Dim aSheet As Worksheet
+ Dim myShape As Shape
+ Set aSheet = Sheets(1)
+
+ For Each myShape In aSheet.Shapes
+ If myShape.Type = msoTextBox Then
+ myShape.Select
+ With Selection.Characters.Font
+ .Name = "MS PGothic"
+ .Size = 10
+ End With
+ End If
+ Next myShape
+ Range("A1").Select
+End Sub
+
diff --git a/migrationanalysis/src/driver_docs/sources/excel/ThisWorkbook.cls b/migrationanalysis/src/driver_docs/sources/excel/ThisWorkbook.cls
new file mode 100644
index 000000000000..bff0f7bcd4f9
--- /dev/null
+++ b/migrationanalysis/src/driver_docs/sources/excel/ThisWorkbook.cls
@@ -0,0 +1,55 @@
+'/*************************************************************************
+' *
+' * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+' *
+' * Copyright 2008 by Sun Microsystems, Inc.
+' *
+' * OpenOffice.org - a multi-platform office productivity suite
+' *
+' * $RCSfile: ThisWorkbook.cls,v $
+' *
+' * This file is part of OpenOffice.org.
+' *
+' * OpenOffice.org is free software: you can redistribute it and/or modify
+' * it under the terms of the GNU Lesser General Public License version 3
+' * only, as published by the Free Software Foundation.
+' *
+' * OpenOffice.org is distributed in the hope that it will be useful,
+' * but WITHOUT ANY WARRANTY; without even the implied warranty of
+' * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+' * GNU Lesser General Public License version 3 for more details
+' * (a copy is included in the LICENSE file that accompanied this code).
+' *
+' * You should have received a copy of the GNU Lesser General Public License
+' * version 3 along with OpenOffice.org. If not, see
+' * <http://www.openoffice.org/license.html>
+' * for a copy of the LGPLv3 License.
+' *
+' ************************************************************************/
+
+Public xlStrings As StringDataManager
+
+Private Sub Workbook_Open()
+ Set xlStrings = New StringDataManager
+
+ xlStrings.InitStringData (GetResourceDataFileName(ThisWorkbook.Path))
+ LoadCommonStrings xlStrings
+ LoadExcelStrings xlStrings
+ LoadResultsStrings xlStrings
+ Set xlStrings = Nothing
+
+ SetWBDriverText
+End Sub
+
+Public Sub SetWBDriverText()
+ On Error Resume Next
+ CAPP_DOCPROP_LOCATION = RID_STR_COMMON_RESULTS_LOCATION_TYPE_DOCUMENT
+ ThisWorkbook.Names("RID_STR_DVR_XL_EXCEL_DRIVER").RefersToRange.Cells(1, 1) = RID_STR_DVR_XL_EXCEL_DRIVER
+ ThisWorkbook.Names("RID_STR_DVR_XL_ISSUES").RefersToRange.Cells(1, 1) = RID_STR_DVR_XL_ISSUES
+ ThisWorkbook.Names("RID_STR_DVR_XL_PURPOSE").RefersToRange.Cells(1, 1) = RID_STR_DVR_XL_PURPOSE
+ ThisWorkbook.Names("RID_STR_DVR_XL_READ_README").RefersToRange.Cells(1, 1) = RID_STR_DVR_XL_READ_README
+ ThisWorkbook.Names("RID_STR_DVR_XL_THE_MACROS").RefersToRange.Cells(1, 1) = RID_STR_DVR_XL_THE_MACROS
+ ThisWorkbook.Names("RID_STR_DVR_XL_THIS_DOC").RefersToRange.Cells(1, 1) = RID_STR_DVR_XL_THIS_DOC
+ ThisWorkbook.Names("RID_STR_DVR_XL_TITLE").RefersToRange.Cells(1, 1) = RID_STR_DVR_XL_TITLE
+End Sub
+
diff --git a/migrationanalysis/src/driver_docs/sources/excel/excel_res.bas b/migrationanalysis/src/driver_docs/sources/excel/excel_res.bas
new file mode 100644
index 000000000000..55b7dc01b3a1
--- /dev/null
+++ b/migrationanalysis/src/driver_docs/sources/excel/excel_res.bas
@@ -0,0 +1,377 @@
+Attribute VB_Name = "excel_res"
+'/*************************************************************************
+' *
+' * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+' *
+' * Copyright 2008 by Sun Microsystems, Inc.
+' *
+' * OpenOffice.org - a multi-platform office productivity suite
+' *
+' * $RCSfile: excel_res.bas,v $
+' *
+' * This file is part of OpenOffice.org.
+' *
+' * OpenOffice.org is free software: you can redistribute it and/or modify
+' * it under the terms of the GNU Lesser General Public License version 3
+' * only, as published by the Free Software Foundation.
+' *
+' * OpenOffice.org is distributed in the hope that it will be useful,
+' * but WITHOUT ANY WARRANTY; without even the implied warranty of
+' * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+' * GNU Lesser General Public License version 3 for more details
+' * (a copy is included in the LICENSE file that accompanied this code).
+' *
+' * You should have received a copy of the GNU Lesser General Public License
+' * version 3 along with OpenOffice.org. If not, see
+' * <http://www.openoffice.org/license.html>
+' * for a copy of the LGPLv3 License.
+' *
+' ************************************************************************/
+
+Public RID_RESXLT_COST_CHART_BarOfPie_Comment As String
+Public RID_RESXLT_COST_CHART_Bubble_Comment As String
+Public RID_RESXLT_COST_CHART_FilledRadar_Comment As String
+Public RID_RESXLT_COST_CHART_Radar_Comment As String
+Public RID_RESXLT_COST_CHART_Scattered_Comment As String
+Public RID_RESXLT_COST_CHART_Surface_Comment As String
+Public RID_RESXLT_COST_PIVOT_CalcVal_Comment As String
+Public RID_RESXLT_COST_PIVOT_ExternData_Comment As String
+Public RID_RESXLT_COST_PIVOT_ManSort_Comment As String
+Public RID_RESXLT_COST_PIVOT_MultConsRanges_Comment As String
+Public RID_RESXLT_COST_PIVOT_PivotChart_Comment As String
+Public RID_STR_EXCEL_ATTRIBUTE_AUTO As String
+Public RID_STR_EXCEL_ATTRIBUTE_AXISINTERVAL As String
+Public RID_STR_EXCEL_ATTRIBUTE_BADCHARACTER As String
+Public RID_STR_EXCEL_ATTRIBUTE_BORDER As String
+Public RID_STR_EXCEL_ATTRIBUTE_BROKEN As String
+Public RID_STR_EXCEL_ATTRIBUTE_BUILT_IN As String
+Public RID_STR_EXCEL_ATTRIBUTE_CATEGORYANDDATA As String
+Public RID_STR_EXCEL_ATTRIBUTE_CATEGORYLABEL As String
+Public RID_STR_EXCEL_ATTRIBUTE_CATEGORYLABELMORETHANONECELL As String
+Public RID_STR_EXCEL_ATTRIBUTE_CHANGED As String
+Public RID_STR_EXCEL_ATTRIBUTE_CHARTNAME As String
+Public RID_STR_EXCEL_ATTRIBUTE_CHECK_DOCUMENT_REFERENCES As String
+Public RID_STR_EXCEL_ATTRIBUTE_COLUMNBAR As String
+Public RID_STR_EXCEL_ATTRIBUTE_COMPONENT As String
+Public RID_STR_EXCEL_ATTRIBUTE_CONTROLS As String
+Public RID_STR_EXCEL_ATTRIBUTE_CUSTOM As String
+Public RID_STR_EXCEL_ATTRIBUTE_CUSTOM_FORMULA As String
+Public RID_STR_EXCEL_ATTRIBUTE_DASHED_DOT As String
+Public RID_STR_EXCEL_ATTRIBUTE_DATALABELWITHLEGEND As String
+Public RID_STR_EXCEL_ATTRIBUTE_DATASOURCE As String
+Public RID_STR_EXCEL_ATTRIBUTE_DATASOURCENOTLINKEDTOCELL As String
+Public RID_STR_EXCEL_ATTRIBUTE_DATASOURCEONDIFFERENTSHEET As String
+Public RID_STR_EXCEL_ATTRIBUTE_DATATABLE As String
+Public RID_STR_EXCEL_ATTRIBUTE_DESCRIPTION As String
+Public RID_STR_EXCEL_ATTRIBUTE_DIFFERENT As String
+Public RID_STR_EXCEL_ATTRIBUTE_DISPLAY_ZOOM As String
+Public RID_STR_EXCEL_ATTRIBUTE_FILE As String
+Public RID_STR_EXCEL_ATTRIBUTE_FILL_PATTERN As String
+Public RID_STR_EXCEL_ATTRIBUTE_FUNCTION_STRING As String
+Public RID_STR_EXCEL_ATTRIBUTE_FURTHER_MACRO_ANALYSIS_NOT_POSSIBLE As String
+Public RID_STR_EXCEL_ATTRIBUTE_GUID As String
+Public RID_STR_EXCEL_ATTRIBUTE_INCLUDING As String
+Public RID_STR_EXCEL_ATTRIBUTE_INTACT As String
+Public RID_STR_EXCEL_ATTRIBUTE_INVALIDCHARACTER As String
+Public RID_STR_EXCEL_ATTRIBUTE_IS_BROKEN As String
+Public RID_STR_EXCEL_ATTRIBUTE_LEGEND_NAME As String
+Public RID_STR_EXCEL_ATTRIBUTE_LEGENDPOSITION As String
+Public RID_STR_EXCEL_ATTRIBUTE_LINE_STYLE As String
+Public RID_STR_EXCEL_ATTRIBUTE_LIST_SOURCE As String
+Public RID_STR_EXCEL_ATTRIBUTE_MAJOR As String
+Public RID_STR_EXCEL_ATTRIBUTE_MINOR As String
+Public RID_STR_EXCEL_ATTRIBUTE_MISSING As String
+Public RID_STR_EXCEL_ATTRIBUTE_NAME As String
+Public RID_STR_EXCEL_ATTRIBUTE_NON_PORTABLE_EXTERNAL_REFERENCES As String
+Public RID_STR_EXCEL_ATTRIBUTE_NOTRIGHT As String
+Public RID_STR_EXCEL_ATTRIBUTE_NUMBER_OF_CELLS As String
+Public RID_STR_EXCEL_ATTRIBUTE_NUMBER_OF_LEGEND_ENTRIES As String
+Public RID_STR_EXCEL_ATTRIBUTE_NUMBER_OF_LINES As String
+Public RID_STR_EXCEL_ATTRIBUTE_NUMBER_OF_PIVOTFIELDS As String
+Public RID_STR_EXCEL_ATTRIBUTE_NUMBER_OF_SHEETS As String
+Public RID_STR_EXCEL_ATTRIBUTE_OBJECT_NAME As String
+Public RID_STR_EXCEL_ATTRIBUTE_OBJECT_TYPE As String
+Public RID_STR_EXCEL_ATTRIBUTE_ONECOLUMNROW As String
+Public RID_STR_EXCEL_ATTRIBUTE_PASSWORD As String
+Public RID_STR_EXCEL_ATTRIBUTE_PASSWORD_TO_MODIFY As String
+Public RID_STR_EXCEL_ATTRIBUTE_PASSWORD_TO_OPEN As String
+Public RID_STR_EXCEL_ATTRIBUTE_PATH As String
+Public RID_STR_EXCEL_ATTRIBUTE_PATTERNED As String
+Public RID_STR_EXCEL_ATTRIBUTE_PIE As String
+Public RID_STR_EXCEL_ATTRIBUTE_PIVOT_FIELDS_NUM As String
+Public RID_STR_EXCEL_ATTRIBUTE_PIVOT_FIELDS_VISIBLE As String
+Public RID_STR_EXCEL_ATTRIBUTE_PIVOT_TABLE_NAME As String
+Public RID_STR_EXCEL_ATTRIBUTE_PRINT_RANGE As String
+Public RID_STR_EXCEL_ATTRIBUTE_PROCEDURES As String
+Public RID_STR_EXCEL_ATTRIBUTE_PROJECT As String
+Public RID_STR_EXCEL_ATTRIBUTE_PROTECT_TYPE_SHARING As String
+Public RID_STR_EXCEL_ATTRIBUTE_PROTECT_TYPE_STRUCTURE As String
+Public RID_STR_EXCEL_ATTRIBUTE_PROTECT_TYPE_WINDOWS As String
+Public RID_STR_EXCEL_ATTRIBUTE_SEPARATE As String
+Public RID_STR_EXCEL_ATTRIBUTE_SERIESCHARTTYPE As String
+Public RID_STR_EXCEL_ATTRIBUTE_SET As String
+Public RID_STR_EXCEL_ATTRIBUTE_SLICES_IN_DIFFERENT_DIRECTION As String
+Public RID_STR_EXCEL_ATTRIBUTE_SOURCE As String
+Public RID_STR_EXCEL_ATTRIBUTE_TIMESCALE As String
+Public RID_STR_EXCEL_ATTRIBUTE_TITLE As String
+Public RID_STR_EXCEL_ATTRIBUTE_TITLEFONT As String
+Public RID_STR_EXCEL_ATTRIBUTE_TRENDLINE As String
+Public RID_STR_EXCEL_ATTRIBUTE_TYPE As String
+Public RID_STR_EXCEL_ATTRIBUTE_TYPELIB As String
+Public RID_STR_EXCEL_ATTRIBUTE_TYPES As String
+Public RID_STR_EXCEL_ATTRIBUTE_UNABLE_TO_ACCESS_VBPROJECT As String
+Public RID_STR_EXCEL_ATTRIBUTE_UNSUPPORTEDTYPE As String
+Public RID_STR_EXCEL_ATTRIBUTE_VALUE As String
+Public RID_STR_EXCEL_ATTRIBUTE_VBPROJECT_PASSWORD_SET As String
+Public RID_STR_EXCEL_ATTRIBUTE_DB_QUERY As String
+Public RID_STR_EXCEL_ATTRIBUTE_WORKBOOK_VERSION As String
+Public RID_STR_EXCEL_ATTRIBUTE_XAXISCATEGORY As String
+Public RID_STR_EXCEL_ENUMERATION_CUSTOM As String
+Public RID_STR_EXCEL_ENUMERATION_LINE_STYLE_CONTINUOUS As String
+Public RID_STR_EXCEL_ENUMERATION_LINE_STYLE_DASH As String
+Public RID_STR_EXCEL_ENUMERATION_LINE_STYLE_DASHDOT As String
+Public RID_STR_EXCEL_ENUMERATION_LINE_STYLE_DOT As String
+Public RID_STR_EXCEL_ENUMERATION_LINE_STYLE_DOUBLE As String
+Public RID_STR_EXCEL_ENUMERATION_LINE_STYLE_LINESTYLENONE As String
+Public RID_STR_EXCEL_ENUMERATION_LINE_STYLE_SLANTDASHDOT As String
+Public RID_STR_EXCEL_ENUMERATION_LIST As String
+Public RID_STR_EXCEL_ENUMERATION_UNKNOWN As String
+Public RID_STR_EXCEL_FALSE As String
+Public RID_STR_EXCEL_ISSUE_CHARTS_AND_TABLES As String
+Public RID_STR_EXCEL_ISSUE_FORMAT As String
+Public RID_STR_EXCEL_ISSUE_FUNCTIONS As String
+Public RID_STR_EXCEL_ISSUE_INFORMATION As String
+Public RID_STR_EXCEL_ISSUE_PORTABILITY As String
+Public RID_STR_EXCEL_ISSUE_VBA_MACROS As String
+Public RID_STR_EXCEL_NOTE_AXISINTERVAL As String
+Public RID_STR_EXCEL_NOTE_BORDER As String
+Public RID_STR_EXCEL_NOTE_CATEGORYANDDATA As String
+Public RID_STR_EXCEL_NOTE_CATEGORYLABELMORETHANONECELL As String
+Public RID_STR_EXCEL_NOTE_CELL_ATTRIBUTES_3 As String
+Public RID_STR_EXCEL_NOTE_CELL_ATTRIBUTES_4 As String
+Public RID_STR_EXCEL_NOTE_CELL_FUNCTIONS_1 As String
+Public RID_STR_EXCEL_NOTE_CELL_FUNCTIONS_2 As String
+Public RID_STR_EXCEL_NOTE_CELL_FUNCTIONS_3 As String
+Public RID_STR_EXCEL_NOTE_CELL_FUNCTIONS_DATEDIF As String
+Public RID_STR_EXCEL_NOTE_CELL_FUNCTIONS_PHONETIC As String
+Public RID_STR_EXCEL_NOTE_COLUMNBAR As String
+Public RID_STR_EXCEL_NOTE_DATALABELWITHLEGEND As String
+Public RID_STR_EXCEL_NOTE_DATASOURCENOTLINKEDTOCELL As String
+Public RID_STR_EXCEL_NOTE_DATASOURCEONDIFFERENTSHEET As String
+Public RID_STR_EXCEL_NOTE_DATATABLE As String
+Public RID_STR_EXCEL_NOTE_DOCUMENT_PROPERTIES_1 As String
+Public RID_STR_EXCEL_NOTE_DOCUMENT_PROPERTIES_2 As String
+Public RID_STR_EXCEL_NOTE_INVALIDWORKSHEETNAME As String
+Public RID_STR_EXCEL_NOTE_LEGENDPOSITION As String
+Public RID_STR_EXCEL_NOTE_OLD_OLDWORKBOOKVERSION_PREPARABLE As String
+Public RID_STR_EXCEL_NOTE_OLDWORKBOOKVERSION As String
+Public RID_STR_EXCEL_NOTE_PASSWORD_TO_OPEN As String
+Public RID_STR_EXCEL_NOTE_SERIESCHARTTYPE As String
+Public RID_STR_EXCEL_NOTE_SHEET_LIMITS_1 As String
+Public RID_STR_EXCEL_NOTE_SHEET_LIMITS_2 As String
+Public RID_STR_EXCEL_NOTE_TITLEFONT As String
+Public RID_STR_EXCEL_NOTE_TRENDLINE As String
+Public RID_STR_EXCEL_NOTE_UNSUPPORTEDTYPE1 As String
+Public RID_STR_EXCEL_NOTE_UNSUPPORTEDTYPE2 As String
+Public RID_STR_EXCEL_NOTE_XAXISCATEGORY As String
+Public RID_STR_EXCEL_NOTE_DB_QUERY As String
+Public RID_STR_EXCEL_NOTE_ZOOM As String
+Public RID_STR_EXCEL_SUBISSUE_ATTRIBUTES As String
+Public RID_STR_EXCEL_SUBISSUE_CHART_COMPLEX As String
+Public RID_STR_EXCEL_SUBISSUE_CHART_MINOR As String
+Public RID_STR_EXCEL_SUBISSUE_EMBEDDED_CHART As String
+Public RID_STR_EXCEL_SUBISSUE_EXTERNAL As String
+Public RID_STR_EXCEL_SUBISSUE_INVALID_WORKSHEET_NAME As String
+Public RID_STR_EXCEL_SUBISSUE_MAX_SHEETS_EXCEEDED As String
+Public RID_STR_EXCEL_SUBISSUE_OLD_WORKBOOK_VERSION As String
+Public RID_STR_EXCEL_SUBISSUE_PIVOT As String
+Public RID_STR_EXCEL_SUBISSUE_SHEET_CHART As String
+Public RID_STR_EXCEL_SUBISSUE_WORKBOOK_PROTECTION As String
+Public RID_STR_EXCEL_SUBISSUE_ZOOM As String
+Public RID_STR_EXCEL_SUBLOCATION_NA As String
+Public RID_STR_EXCEL_TRUE As String
+
+'Excel Driver Strings
+Public RID_STR_DVR_XL_EXCEL_DRIVER As String
+Public RID_STR_DVR_XL_ISSUES As String
+Public RID_STR_DVR_XL_PURPOSE As String
+Public RID_STR_DVR_XL_READ_README As String
+Public RID_STR_DVR_XL_THE_MACROS As String
+Public RID_STR_DVR_XL_THIS_DOC As String
+Public RID_STR_DVR_XL_TITLE As String
+
+Public Sub LoadExcelStrings(sdm As StringDataManager)
+ 'Excel Strings
+ sdm.InitString RID_RESXLT_COST_CHART_BarOfPie_Comment, "RID_RESXLT_COST_CHART_BarOfPie_Comment"
+ sdm.InitString RID_RESXLT_COST_CHART_Bubble_Comment, "RID_RESXLT_COST_CHART_Bubble_Comment"
+ sdm.InitString RID_RESXLT_COST_CHART_FilledRadar_Comment, "RID_RESXLT_COST_CHART_FilledRadar_Comment"
+ sdm.InitString RID_RESXLT_COST_CHART_Radar_Comment, "RID_RESXLT_COST_CHART_Radar_Comment"
+ sdm.InitString RID_RESXLT_COST_CHART_Scattered_Comment, "RID_RESXLT_COST_CHART_Scattered_Comment"
+ sdm.InitString RID_RESXLT_COST_CHART_Surface_Comment, "RID_RESXLT_COST_CHART_Surface_Comment"
+ sdm.InitString RID_RESXLT_COST_PIVOT_CalcVal_Comment, "RID_RESXLT_COST_PIVOT_CalcVal_Comment"
+ sdm.InitString RID_RESXLT_COST_PIVOT_ExternData_Comment, "RID_RESXLT_COST_PIVOT_ExternData_Comment"
+ sdm.InitString RID_RESXLT_COST_PIVOT_ManSort_Comment, "RID_RESXLT_COST_PIVOT_ManSort_Comment"
+ sdm.InitString RID_RESXLT_COST_PIVOT_MultConsRanges_Comment, "RID_RESXLT_COST_PIVOT_MultConsRanges_Comment"
+ sdm.InitString RID_RESXLT_COST_PIVOT_PivotChart_Comment, "RID_RESXLT_COST_PIVOT_PivotChart_Comment"
+ sdm.InitString RID_STR_EXCEL_ATTRIBUTE_AUTO, "RID_STR_EXCEL_ATTRIBUTE_AUTO"
+ sdm.InitString RID_STR_EXCEL_ATTRIBUTE_AXISINTERVAL, "RID_STR_EXCEL_ATTRIBUTE_AXISINTERVAL"
+ sdm.InitString RID_STR_EXCEL_ATTRIBUTE_BADCHARACTER, "RID_STR_EXCEL_ATTRIBUTE_BADCHARACTER"
+ sdm.InitString RID_STR_EXCEL_ATTRIBUTE_BORDER, "RID_STR_EXCEL_ATTRIBUTE_BORDER"
+ sdm.InitString RID_STR_EXCEL_ATTRIBUTE_BROKEN, "RID_STR_EXCEL_ATTRIBUTE_BROKEN"
+ sdm.InitString RID_STR_EXCEL_ATTRIBUTE_BUILT_IN, "RID_STR_EXCEL_ATTRIBUTE_BUILT_IN"
+ sdm.InitString RID_STR_EXCEL_ATTRIBUTE_CATEGORYANDDATA, "RID_STR_EXCEL_ATTRIBUTE_CATEGORYANDDATA"
+ sdm.InitString RID_STR_EXCEL_ATTRIBUTE_CATEGORYLABEL, "RID_STR_EXCEL_ATTRIBUTE_CATEGORYLABEL"
+ sdm.InitString RID_STR_EXCEL_ATTRIBUTE_CATEGORYLABELMORETHANONECELL, "RID_STR_EXCEL_ATTRIBUTE_CATEGORYLABELMORETHANONECELL"
+ sdm.InitString RID_STR_EXCEL_ATTRIBUTE_CHANGED, "RID_STR_EXCEL_ATTRIBUTE_CHANGED"
+ sdm.InitString RID_STR_EXCEL_ATTRIBUTE_CHARTNAME, "RID_STR_EXCEL_ATTRIBUTE_CHARTNAME"
+ sdm.InitString RID_STR_EXCEL_ATTRIBUTE_CHECK_DOCUMENT_REFERENCES, "RID_STR_EXCEL_ATTRIBUTE_CHECK_DOCUMENT_REFERENCES"
+ sdm.InitString RID_STR_EXCEL_ATTRIBUTE_COLUMNBAR, "RID_STR_EXCEL_ATTRIBUTE_COLUMNBAR"
+ sdm.InitString RID_STR_EXCEL_ATTRIBUTE_COMPONENT, "RID_STR_EXCEL_ATTRIBUTE_COMPONENT"
+ sdm.InitString RID_STR_EXCEL_ATTRIBUTE_CONTROLS, "RID_STR_EXCEL_ATTRIBUTE_CONTROLS"
+ sdm.InitString RID_STR_EXCEL_ATTRIBUTE_CUSTOM, "RID_STR_EXCEL_ATTRIBUTE_CUSTOM"
+ sdm.InitString RID_STR_EXCEL_ATTRIBUTE_CUSTOM_FORMULA, "RID_STR_EXCEL_ATTRIBUTE_CUSTOM_FORMULA"
+ sdm.InitString RID_STR_EXCEL_ATTRIBUTE_DASHED_DOT, "RID_STR_EXCEL_ATTRIBUTE_DASHED_DOT"
+ sdm.InitString RID_STR_EXCEL_ATTRIBUTE_DATALABELWITHLEGEND, "RID_STR_EXCEL_ATTRIBUTE_DATALABELWITHLEGEND"
+ sdm.InitString RID_STR_EXCEL_ATTRIBUTE_DATASOURCE, "RID_STR_EXCEL_ATTRIBUTE_DATASOURCE"
+ sdm.InitString RID_STR_EXCEL_ATTRIBUTE_DATASOURCENOTLINKEDTOCELL, "RID_STR_EXCEL_ATTRIBUTE_DATASOURCENOTLINKEDTOCELL"
+ sdm.InitString RID_STR_EXCEL_ATTRIBUTE_DATASOURCEONDIFFERENTSHEET, "RID_STR_EXCEL_ATTRIBUTE_DATASOURCEONDIFFERENTSHEET"
+ sdm.InitString RID_STR_EXCEL_ATTRIBUTE_DATATABLE, "RID_STR_EXCEL_ATTRIBUTE_DATATABLE"
+ sdm.InitString RID_STR_EXCEL_ATTRIBUTE_DESCRIPTION, "RID_STR_EXCEL_ATTRIBUTE_DESCRIPTION"
+ sdm.InitString RID_STR_EXCEL_ATTRIBUTE_DIFFERENT, "RID_STR_EXCEL_ATTRIBUTE_DIFFERENT"
+ sdm.InitString RID_STR_EXCEL_ATTRIBUTE_DISPLAY_ZOOM, "RID_STR_EXCEL_ATTRIBUTE_DISPLAY_ZOOM"
+ sdm.InitString RID_STR_EXCEL_ATTRIBUTE_FILE, "RID_STR_EXCEL_ATTRIBUTE_FILE"
+ sdm.InitString RID_STR_EXCEL_ATTRIBUTE_FILL_PATTERN, "RID_STR_EXCEL_ATTRIBUTE_FILL_PATTERN"
+ sdm.InitString RID_STR_EXCEL_ATTRIBUTE_FUNCTION_STRING, "RID_STR_EXCEL_ATTRIBUTE_FUNCTION_STRING"
+ sdm.InitString RID_STR_EXCEL_ATTRIBUTE_FURTHER_MACRO_ANALYSIS_NOT_POSSIBLE, "RID_STR_EXCEL_ATTRIBUTE_FURTHER_MACRO_ANALYSIS_NOT_POSSIBLE"
+ sdm.InitString RID_STR_EXCEL_ATTRIBUTE_GUID, "RID_STR_EXCEL_ATTRIBUTE_GUID"
+ sdm.InitString RID_STR_EXCEL_ATTRIBUTE_INCLUDING, "RID_STR_EXCEL_ATTRIBUTE_INCLUDING"
+ sdm.InitString RID_STR_EXCEL_ATTRIBUTE_INTACT, "RID_STR_EXCEL_ATTRIBUTE_INTACT"
+ sdm.InitString RID_STR_EXCEL_ATTRIBUTE_INVALIDCHARACTER, "RID_STR_EXCEL_ATTRIBUTE_INVALIDCHARACTER"
+ sdm.InitString RID_STR_EXCEL_ATTRIBUTE_IS_BROKEN, "RID_STR_EXCEL_ATTRIBUTE_IS_BROKEN"
+ sdm.InitString RID_STR_EXCEL_ATTRIBUTE_LEGEND_NAME, "RID_STR_EXCEL_ATTRIBUTE_LEGEND_NAME"
+ sdm.InitString RID_STR_EXCEL_ATTRIBUTE_LEGENDPOSITION, "RID_STR_EXCEL_ATTRIBUTE_LEGENDPOSITION"
+ sdm.InitString RID_STR_EXCEL_ATTRIBUTE_LINE_STYLE, "RID_STR_EXCEL_ATTRIBUTE_LINE_STYLE"
+ sdm.InitString RID_STR_EXCEL_ATTRIBUTE_LIST_SOURCE, "RID_STR_EXCEL_ATTRIBUTE_LIST_SOURCE"
+ sdm.InitString RID_STR_EXCEL_ATTRIBUTE_MAJOR, "RID_STR_EXCEL_ATTRIBUTE_MAJOR"
+ sdm.InitString RID_STR_EXCEL_ATTRIBUTE_MINOR, "RID_STR_EXCEL_ATTRIBUTE_MINOR"
+ sdm.InitString RID_STR_EXCEL_ATTRIBUTE_MISSING, "RID_STR_EXCEL_ATTRIBUTE_MISSING"
+ sdm.InitString RID_STR_EXCEL_ATTRIBUTE_NAME, "RID_STR_EXCEL_ATTRIBUTE_NAME"
+ sdm.InitString RID_STR_EXCEL_ATTRIBUTE_NON_PORTABLE_EXTERNAL_REFERENCES, "RID_STR_EXCEL_ATTRIBUTE_NON_PORTABLE_EXTERNAL_REFERENCES"
+ sdm.InitString RID_STR_EXCEL_ATTRIBUTE_NOTRIGHT, "RID_STR_EXCEL_ATTRIBUTE_NOTRIGHT"
+ sdm.InitString RID_STR_EXCEL_ATTRIBUTE_NUMBER_OF_CELLS, "RID_STR_EXCEL_ATTRIBUTE_NUMBER_OF_CELLS"
+ sdm.InitString RID_STR_EXCEL_ATTRIBUTE_NUMBER_OF_LEGEND_ENTRIES, "RID_STR_EXCEL_ATTRIBUTE_NUMBER_OF_LEGEND_ENTRIES"
+ sdm.InitString RID_STR_EXCEL_ATTRIBUTE_NUMBER_OF_LINES, "RID_STR_EXCEL_ATTRIBUTE_NUMBER_OF_LINES"
+ sdm.InitString RID_STR_EXCEL_ATTRIBUTE_NUMBER_OF_PIVOTFIELDS, "RID_STR_EXCEL_ATTRIBUTE_NUMBER_OF_PIVOTFIELDS"
+ sdm.InitString RID_STR_EXCEL_ATTRIBUTE_NUMBER_OF_SHEETS, "RID_STR_EXCEL_ATTRIBUTE_NUMBER_OF_SHEETS"
+ sdm.InitString RID_STR_EXCEL_ATTRIBUTE_OBJECT_NAME, "RID_STR_EXCEL_ATTRIBUTE_OBJECT_NAME"
+ sdm.InitString RID_STR_EXCEL_ATTRIBUTE_OBJECT_TYPE, "RID_STR_EXCEL_ATTRIBUTE_OBJECT_TYPE"
+ sdm.InitString RID_STR_EXCEL_ATTRIBUTE_ONECOLUMNROW, "RID_STR_EXCEL_ATTRIBUTE_ONECOLUMNROW"
+ sdm.InitString RID_STR_EXCEL_ATTRIBUTE_PASSWORD, "RID_STR_EXCEL_ATTRIBUTE_PASSWORD"
+ sdm.InitString RID_STR_EXCEL_ATTRIBUTE_PASSWORD_TO_MODIFY, "RID_STR_EXCEL_ATTRIBUTE_PASSWORD_TO_MODIFY"
+ sdm.InitString RID_STR_EXCEL_ATTRIBUTE_PASSWORD_TO_OPEN, "RID_STR_EXCEL_ATTRIBUTE_PASSWORD_TO_OPEN"
+ sdm.InitString RID_STR_EXCEL_ATTRIBUTE_PATH, "RID_STR_EXCEL_ATTRIBUTE_PATH"
+ sdm.InitString RID_STR_EXCEL_ATTRIBUTE_PATTERNED, "RID_STR_EXCEL_ATTRIBUTE_PATTERNED"
+ sdm.InitString RID_STR_EXCEL_ATTRIBUTE_PIE, "RID_STR_EXCEL_ATTRIBUTE_PIE"
+ sdm.InitString RID_STR_EXCEL_ATTRIBUTE_PIVOT_FIELDS_NUM, "RID_STR_EXCEL_ATTRIBUTE_PIVOT_FIELDS_NUM"
+ sdm.InitString RID_STR_EXCEL_ATTRIBUTE_PIVOT_FIELDS_VISIBLE, "RID_STR_EXCEL_ATTRIBUTE_PIVOT_FIELDS_VISIBLE"
+ sdm.InitString RID_STR_EXCEL_ATTRIBUTE_PIVOT_TABLE_NAME, "RID_STR_EXCEL_ATTRIBUTE_PIVOT_TABLE_NAME"
+ sdm.InitString RID_STR_EXCEL_ATTRIBUTE_PRINT_RANGE, "RID_STR_EXCEL_ATTRIBUTE_PRINT_RANGE"
+ sdm.InitString RID_STR_EXCEL_ATTRIBUTE_PROCEDURES, "RID_STR_EXCEL_ATTRIBUTE_PROCEDURES"
+ sdm.InitString RID_STR_EXCEL_ATTRIBUTE_PROJECT, "RID_STR_EXCEL_ATTRIBUTE_PROJECT"
+ sdm.InitString RID_STR_EXCEL_ATTRIBUTE_PROTECT_TYPE_SHARING, "RID_STR_EXCEL_ATTRIBUTE_PROTECT_TYPE_SHARING"
+ sdm.InitString RID_STR_EXCEL_ATTRIBUTE_PROTECT_TYPE_STRUCTURE, "RID_STR_EXCEL_ATTRIBUTE_PROTECT_TYPE_STRUCTURE"
+ sdm.InitString RID_STR_EXCEL_ATTRIBUTE_PROTECT_TYPE_WINDOWS, "RID_STR_EXCEL_ATTRIBUTE_PROTECT_TYPE_WINDOWS"
+ sdm.InitString RID_STR_EXCEL_ATTRIBUTE_SEPARATE, "RID_STR_EXCEL_ATTRIBUTE_SEPARATE"
+ sdm.InitString RID_STR_EXCEL_ATTRIBUTE_SERIESCHARTTYPE, "RID_STR_EXCEL_ATTRIBUTE_SERIESCHARTTYPE"
+ sdm.InitString RID_STR_EXCEL_ATTRIBUTE_SET, "RID_STR_EXCEL_ATTRIBUTE_SET"
+ sdm.InitString RID_STR_EXCEL_ATTRIBUTE_SLICES_IN_DIFFERENT_DIRECTION, "RID_STR_EXCEL_ATTRIBUTE_SLICES_IN_DIFFERENT_DIRECTION"
+ sdm.InitString RID_STR_EXCEL_ATTRIBUTE_SOURCE, "RID_STR_EXCEL_ATTRIBUTE_SOURCE"
+ sdm.InitString RID_STR_EXCEL_ATTRIBUTE_TIMESCALE, "RID_STR_EXCEL_ATTRIBUTE_TIMESCALE"
+ sdm.InitString RID_STR_EXCEL_ATTRIBUTE_TITLE, "RID_STR_EXCEL_ATTRIBUTE_TITLE"
+ sdm.InitString RID_STR_EXCEL_ATTRIBUTE_TITLEFONT, "RID_STR_EXCEL_ATTRIBUTE_TITLEFONT"
+ sdm.InitString RID_STR_EXCEL_ATTRIBUTE_TRENDLINE, "RID_STR_EXCEL_ATTRIBUTE_TRENDLINE"
+ sdm.InitString RID_STR_EXCEL_ATTRIBUTE_TYPE, "RID_STR_EXCEL_ATTRIBUTE_TYPE"
+ sdm.InitString RID_STR_EXCEL_ATTRIBUTE_TYPELIB, "RID_STR_EXCEL_ATTRIBUTE_TYPELIB"
+ sdm.InitString RID_STR_EXCEL_ATTRIBUTE_TYPES, "RID_STR_EXCEL_ATTRIBUTE_TYPES"
+ sdm.InitString RID_STR_EXCEL_ATTRIBUTE_UNABLE_TO_ACCESS_VBPROJECT, "RID_STR_EXCEL_ATTRIBUTE_UNABLE_TO_ACCESS_VBPROJECT"
+ sdm.InitString RID_STR_EXCEL_ATTRIBUTE_UNSUPPORTEDTYPE, "RID_STR_EXCEL_ATTRIBUTE_UNSUPPORTEDTYPE"
+ sdm.InitString RID_STR_EXCEL_ATTRIBUTE_VALUE, "RID_STR_EXCEL_ATTRIBUTE_VALUE"
+ sdm.InitString RID_STR_EXCEL_ATTRIBUTE_VBPROJECT_PASSWORD_SET, "RID_STR_EXCEL_ATTRIBUTE_VBPROJECT_PASSWORD_SET"
+ sdm.InitString RID_STR_EXCEL_ATTRIBUTE_DB_QUERY, "RID_STR_EXCEL_ATTRIBUTE_DB_QUERY"
+ sdm.InitString RID_STR_EXCEL_ATTRIBUTE_WORKBOOK_VERSION, "RID_STR_EXCEL_ATTRIBUTE_WORKBOOK_VERSION"
+ sdm.InitString RID_STR_EXCEL_ATTRIBUTE_XAXISCATEGORY, "RID_STR_EXCEL_ATTRIBUTE_XAXISCATEGORY"
+ sdm.InitString RID_STR_EXCEL_ENUMERATION_CUSTOM, "RID_STR_EXCEL_ENUMERATION_CUSTOM"
+ sdm.InitString RID_STR_EXCEL_ENUMERATION_LINE_STYLE_CONTINUOUS, "RID_STR_EXCEL_ENUMERATION_LINE_STYLE_CONTINUOUS"
+ sdm.InitString RID_STR_EXCEL_ENUMERATION_LINE_STYLE_DASH, "RID_STR_EXCEL_ENUMERATION_LINE_STYLE_DASH"
+ sdm.InitString RID_STR_EXCEL_ENUMERATION_LINE_STYLE_DASHDOT, "RID_STR_EXCEL_ENUMERATION_LINE_STYLE_DASHDOT"
+ sdm.InitString RID_STR_EXCEL_ENUMERATION_LINE_STYLE_DOT, "RID_STR_EXCEL_ENUMERATION_LINE_STYLE_DOT"
+ sdm.InitString RID_STR_EXCEL_ENUMERATION_LINE_STYLE_DOUBLE, "RID_STR_EXCEL_ENUMERATION_LINE_STYLE_DOUBLE"
+ sdm.InitString RID_STR_EXCEL_ENUMERATION_LINE_STYLE_LINESTYLENONE, "RID_STR_EXCEL_ENUMERATION_LINE_STYLE_LINESTYLENONE"
+ sdm.InitString RID_STR_EXCEL_ENUMERATION_LINE_STYLE_SLANTDASHDOT, "RID_STR_EXCEL_ENUMERATION_LINE_STYLE_SLANTDASHDOT"
+ sdm.InitString RID_STR_EXCEL_ENUMERATION_LIST, "RID_STR_EXCEL_ENUMERATION_LIST"
+ sdm.InitString RID_STR_EXCEL_ENUMERATION_UNKNOWN, "RID_STR_EXCEL_ENUMERATION_UNKNOWN"
+ sdm.InitString RID_STR_EXCEL_FALSE, "RID_STR_EXCEL_FALSE"
+ sdm.InitString RID_STR_EXCEL_ISSUE_CHARTS_AND_TABLES, "RID_STR_EXCEL_ISSUE_CHARTS_AND_TABLES"
+ sdm.InitString RID_STR_EXCEL_ISSUE_FORMAT, "RID_STR_EXCEL_ISSUE_FORMAT"
+ sdm.InitString RID_STR_EXCEL_ISSUE_FUNCTIONS, "RID_STR_EXCEL_ISSUE_FUNCTIONS"
+ sdm.InitString RID_STR_EXCEL_ISSUE_INFORMATION, "RID_STR_EXCEL_ISSUE_INFORMATION"
+ sdm.InitString RID_STR_EXCEL_ISSUE_PORTABILITY, "RID_STR_EXCEL_ISSUE_PORTABILITY"
+ sdm.InitString RID_STR_EXCEL_ISSUE_VBA_MACROS, "RID_STR_EXCEL_ISSUE_VBA_MACROS"
+ sdm.InitString RID_STR_EXCEL_NOTE_AXISINTERVAL, "RID_STR_EXCEL_NOTE_AXISINTERVAL"
+ sdm.InitString RID_STR_EXCEL_NOTE_BORDER, "RID_STR_EXCEL_NOTE_BORDER"
+ sdm.InitString RID_STR_EXCEL_NOTE_CATEGORYANDDATA, "RID_STR_EXCEL_NOTE_CATEGORYANDDATA"
+ sdm.InitString RID_STR_EXCEL_NOTE_CATEGORYLABELMORETHANONECELL, "RID_STR_EXCEL_NOTE_CATEGORYLABELMORETHANONECELL"
+ sdm.InitString RID_STR_EXCEL_NOTE_CELL_ATTRIBUTES_3, "RID_STR_EXCEL_NOTE_CELL_ATTRIBUTES_3"
+ sdm.InitString RID_STR_EXCEL_NOTE_CELL_ATTRIBUTES_4, "RID_STR_EXCEL_NOTE_CELL_ATTRIBUTES_4"
+ sdm.InitString RID_STR_EXCEL_NOTE_CELL_FUNCTIONS_1, "RID_STR_EXCEL_NOTE_CELL_FUNCTIONS_1"
+ sdm.InitString RID_STR_EXCEL_NOTE_CELL_FUNCTIONS_2, "RID_STR_EXCEL_NOTE_CELL_FUNCTIONS_2"
+ sdm.InitString RID_STR_EXCEL_NOTE_CELL_FUNCTIONS_3, "RID_STR_EXCEL_NOTE_CELL_FUNCTIONS_3"
+ sdm.InitString RID_STR_EXCEL_NOTE_CELL_FUNCTIONS_DATEDIF, "RID_STR_EXCEL_NOTE_CELL_FUNCTIONS_DATEDIF"
+ sdm.InitString RID_STR_EXCEL_NOTE_CELL_FUNCTIONS_PHONETIC, "RID_STR_EXCEL_NOTE_CELL_FUNCTIONS_PHONETIC"
+ sdm.InitString RID_STR_EXCEL_NOTE_COLUMNBAR, "RID_STR_EXCEL_NOTE_COLUMNBAR"
+ sdm.InitString RID_STR_EXCEL_NOTE_DATALABELWITHLEGEND, "RID_STR_EXCEL_NOTE_DATALABELWITHLEGEND"
+ sdm.InitString RID_STR_EXCEL_NOTE_DATASOURCENOTLINKEDTOCELL, "RID_STR_EXCEL_NOTE_DATASOURCENOTLINKEDTOCELL"
+ sdm.InitString RID_STR_EXCEL_NOTE_DATASOURCEONDIFFERENTSHEET, "RID_STR_EXCEL_NOTE_DATASOURCEONDIFFERENTSHEET"
+ sdm.InitString RID_STR_EXCEL_NOTE_DATATABLE, "RID_STR_EXCEL_NOTE_DATATABLE"
+ sdm.InitString RID_STR_EXCEL_NOTE_DOCUMENT_PROPERTIES_1, "RID_STR_EXCEL_NOTE_DOCUMENT_PROPERTIES_1"
+ sdm.InitString RID_STR_EXCEL_NOTE_DOCUMENT_PROPERTIES_2, "RID_STR_EXCEL_NOTE_DOCUMENT_PROPERTIES_2"
+ sdm.InitString RID_STR_EXCEL_NOTE_INVALIDWORKSHEETNAME, "RID_STR_EXCEL_NOTE_INVALIDWORKSHEETNAME"
+ sdm.InitString RID_STR_EXCEL_NOTE_LEGENDPOSITION, "RID_STR_EXCEL_NOTE_LEGENDPOSITION"
+ sdm.InitString RID_STR_EXCEL_NOTE_OLD_OLDWORKBOOKVERSION_PREPARABLE, "RID_STR_EXCEL_NOTE_OLD_OLDWORKBOOKVERSION_PREPARABLE"
+ sdm.InitString RID_STR_EXCEL_NOTE_OLDWORKBOOKVERSION, "RID_STR_EXCEL_NOTE_OLDWORKBOOKVERSION"
+ sdm.InitString RID_STR_EXCEL_NOTE_PASSWORD_TO_OPEN, "RID_STR_EXCEL_NOTE_PASSWORD_TO_OPEN"
+ sdm.InitString RID_STR_EXCEL_NOTE_SERIESCHARTTYPE, "RID_STR_EXCEL_NOTE_SERIESCHARTTYPE"
+ sdm.InitString RID_STR_EXCEL_NOTE_SHEET_LIMITS_1, "RID_STR_EXCEL_NOTE_SHEET_LIMITS_1"
+ sdm.InitString RID_STR_EXCEL_NOTE_SHEET_LIMITS_2, "RID_STR_EXCEL_NOTE_SHEET_LIMITS_2"
+ sdm.InitString RID_STR_EXCEL_NOTE_TITLEFONT, "RID_STR_EXCEL_NOTE_TITLEFONT"
+ sdm.InitString RID_STR_EXCEL_NOTE_TRENDLINE, "RID_STR_EXCEL_NOTE_TRENDLINE"
+ sdm.InitString RID_STR_EXCEL_NOTE_UNSUPPORTEDTYPE1, "RID_STR_EXCEL_NOTE_UNSUPPORTEDTYPE1"
+ sdm.InitString RID_STR_EXCEL_NOTE_UNSUPPORTEDTYPE2, "RID_STR_EXCEL_NOTE_UNSUPPORTEDTYPE2"
+ sdm.InitString RID_STR_EXCEL_NOTE_XAXISCATEGORY, "RID_STR_EXCEL_NOTE_XAXISCATEGORY"
+ sdm.InitString RID_STR_EXCEL_NOTE_DB_QUERY, "RID_STR_EXCEL_NOTE_DB_QUERY"
+ sdm.InitString RID_STR_EXCEL_NOTE_ZOOM, "RID_STR_EXCEL_NOTE_ZOOM"
+ sdm.InitString RID_STR_EXCEL_SUBISSUE_ATTRIBUTES, "RID_STR_EXCEL_SUBISSUE_ATTRIBUTES"
+ sdm.InitString RID_STR_EXCEL_SUBISSUE_CHART_COMPLEX, "RID_STR_EXCEL_SUBISSUE_CHART_COMPLEX"
+ sdm.InitString RID_STR_EXCEL_SUBISSUE_CHART_MINOR, "RID_STR_EXCEL_SUBISSUE_CHART_MINOR"
+ sdm.InitString RID_STR_EXCEL_SUBISSUE_EMBEDDED_CHART, "RID_STR_EXCEL_SUBISSUE_EMBEDDED_CHART"
+ sdm.InitString RID_STR_EXCEL_SUBISSUE_EXTERNAL, "RID_STR_EXCEL_SUBISSUE_EXTERNAL"
+ sdm.InitString RID_STR_EXCEL_SUBISSUE_INVALID_WORKSHEET_NAME, "RID_STR_EXCEL_SUBISSUE_INVALID_WORKSHEET_NAME"
+ sdm.InitString RID_STR_EXCEL_SUBISSUE_MAX_SHEETS_EXCEEDED, "RID_STR_EXCEL_SUBISSUE_MAX_SHEETS_EXCEEDED"
+ sdm.InitString RID_STR_EXCEL_SUBISSUE_OLD_WORKBOOK_VERSION, "RID_STR_EXCEL_SUBISSUE_OLD_WORKBOOK_VERSION"
+ sdm.InitString RID_STR_EXCEL_SUBISSUE_PIVOT, "RID_STR_EXCEL_SUBISSUE_PIVOT"
+ sdm.InitString RID_STR_EXCEL_SUBISSUE_SHEET_CHART, "RID_STR_EXCEL_SUBISSUE_SHEET_CHART"
+ sdm.InitString RID_STR_EXCEL_SUBISSUE_WORKBOOK_PROTECTION, "RID_STR_EXCEL_SUBISSUE_WORKBOOK_PROTECTION"
+ sdm.InitString RID_STR_EXCEL_SUBISSUE_ZOOM, "RID_STR_EXCEL_SUBISSUE_ZOOM"
+ sdm.InitString RID_STR_EXCEL_SUBLOCATION_NA, "RID_STR_EXCEL_SUBLOCATION_NA"
+ sdm.InitString RID_STR_EXCEL_TRUE, "RID_STR_EXCEL_TRUE"
+
+ 'Excel Driver Strings
+ sdm.InitString RID_STR_DVR_XL_EXCEL_DRIVER, "RID_STR_DVR_XL_EXCEL_DRIVER"
+ sdm.InitString RID_STR_DVR_XL_ISSUES, "RID_STR_DVR_XL_ISSUES"
+ sdm.InitString RID_STR_DVR_XL_PURPOSE, "RID_STR_DVR_XL_PURPOSE"
+ sdm.InitString RID_STR_DVR_XL_READ_README, "RID_STR_DVR_XL_READ_README"
+ sdm.InitString RID_STR_DVR_XL_THE_MACROS, "RID_STR_DVR_XL_THE_MACROS"
+ sdm.InitString RID_STR_DVR_XL_THIS_DOC, "RID_STR_DVR_XL_THIS_DOC"
+ sdm.InitString RID_STR_DVR_XL_TITLE, "RID_STR_DVR_XL_TITLE"
+End Sub
+
diff --git a/migrationanalysis/src/driver_docs/sources/powerpoint/ApplicationSpecific.bas b/migrationanalysis/src/driver_docs/sources/powerpoint/ApplicationSpecific.bas
new file mode 100644
index 000000000000..0d18d13cbae5
--- /dev/null
+++ b/migrationanalysis/src/driver_docs/sources/powerpoint/ApplicationSpecific.bas
@@ -0,0 +1,178 @@
+Attribute VB_Name = "ApplicationSpecific"
+'/*************************************************************************
+' *
+' * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+' *
+' * Copyright 2008 by Sun Microsystems, Inc.
+' *
+' * OpenOffice.org - a multi-platform office productivity suite
+' *
+' * $RCSfile: ApplicationSpecific.bas,v $
+' *
+' * This file is part of OpenOffice.org.
+' *
+' * OpenOffice.org is free software: you can redistribute it and/or modify
+' * it under the terms of the GNU Lesser General Public License version 3
+' * only, as published by the Free Software Foundation.
+' *
+' * OpenOffice.org is distributed in the hope that it will be useful,
+' * but WITHOUT ANY WARRANTY; without even the implied warranty of
+' * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+' * GNU Lesser General Public License version 3 for more details
+' * (a copy is included in the LICENSE file that accompanied this code).
+' *
+' * You should have received a copy of the GNU Lesser General Public License
+' * version 3 along with OpenOffice.org. If not, see
+' * <http://www.openoffice.org/license.html>
+' * for a copy of the LGPLv3 License.
+' *
+' ************************************************************************/
+
+Option Explicit
+
+'*** Do NOT add any new categories - use those listed below or else the results spreadsheet and
+'*** issues list will be out of sync
+Public Const GlbPowerPoint = True
+
+'** Issue Categories
+Public Const CID_INFORMATION_REFS = 0
+Public Const CID_ACTION_SETTINGS = 1
+Public Const CID_CONTENT_AND_DOCUMENT_PROPERTIES = 2
+Public Const CID_FIELDS = 3
+Public Const CID_FORMAT = 4
+Public Const CID_NOTES_AND_HANDOUTS = 5
+Public Const CID_OBJECTS_GRAPHICS_TEXTBOXES = 6
+Public Const CID_PORTABILITY = 7
+Public Const CID_VBA_MACROS = 8
+Public Const CTOTAL_CATEGORIES = 8
+
+'** PP - XML Issue and SubIssue strings
+Public Const CSTR_ISSUE_OBJECTS_GRAPHICS_AND_TEXTBOXES = "ObjectsGraphicsAndTextboxes"
+
+Public Const CSTR_SUBISSUE_COMMENT = "Comment"
+Public Const CSTR_SUBISSUE_MOVIE = "Movie"
+Public Const CSTR_SUBISSUE_BACKGROUND = "Background"
+Public Const CSTR_SUBISSUE_NUMBERING = "Numbering"
+Public Const CSTR_SUBISSUE_HYPERLINK = "Hyperlink"
+Public Const CSTR_SUBISSUE_HYPERLINK_SPLIT = "HyperlinkSplit"
+Public Const CSTR_SUBISSUE_TEMPLATE = "Template"
+Public Const CSTR_SUBISSUE_TABSTOP = "Tabstop"
+Public Const CSTR_SUBISSUE_FONTS = "Fonts"
+
+'** END PP - XML Issue and SubIssue strings
+
+Public Const CAPPNAME_WORD = "Word"
+'Public Const CAPPNAME_WORD_DOC = ".doc"
+'Public Const CAPPNAME_WORD_DOT = ".dot"
+
+Public Const CAPPNAME_EXCEL = "Excel"
+'Public Const CAPPNAME_EXCEL_DOC = ".xls"
+'Public Const CAPPNAME_EXCEL_DOT = ".xlt"
+
+Public Const CAPPNAME_POWERPOINT = "PowerPoint"
+Public Const CAPPNAME_PP_DOC = ".ppt"
+Public Const CAPPNAME_PP_DOT = ".pot"
+
+'Public Const CAPP_DOCPROP_LOCATION = "Document"
+'Public Const CAPP_DOCPROP_LOCATION = "Workbook"
+Public CAPP_DOCPROP_LOCATION As String
+
+
+'Public Const CAPP_XMLDOCPROP_LOCATION = "Document"
+'Public Const CAPP_XMLDOCPROP_LOCATION = "Workbook"
+Public Const CAPP_XMLDOCPROP_LOCATION = "Presentation"
+
+Public Const CTHIS_DOCUMENT = "ThisDocument"
+Public Const CTOPLEVEL_PROJECT = "Project"
+
+Const CSTART_DIR = 1
+Const CSTORE_TO_DIR = 2
+Const CRESULTS_FILE = 3
+Const CRESULTS_TEMPALTE = 4
+Const COVERWRITE_FILE = 5
+Const CNEW_RESULTS_FILE = 6
+Const CDOCUMENT = 7
+Const CTEMPLATE = 8
+Const CINCLUDE_SUBDIRS = 9
+Const CLOG_FILE = 10
+Const CDEBUG_LEVEL = 11
+
+Public Function getAppSpecificDocExt() As String
+ getAppSpecificDocExt = CAPPNAME_PP_DOC
+End Function
+Public Function getAppSpecificTemplateExt() As String
+ getAppSpecificTemplateExt = CAPPNAME_PP_DOT
+End Function
+
+Public Function getAppSpecificPath() As String
+ getAppSpecificPath = ActivePresentation.path
+End Function
+Public Function getAppSpecificApplicationName() As String
+ getAppSpecificApplicationName = CAPPNAME_POWERPOINT
+End Function
+
+Public Function getAppSpecificCustomDocProperties(currDoc As Presentation) As DocumentProperties
+ Set getAppSpecificCustomDocProperties = currDoc.CustomDocumentProperties
+End Function
+Public Function getAppSpecificCommentBuiltInDocProperty(currDoc As Presentation) As DocumentProperty
+ Set getAppSpecificCommentBuiltInDocProperty = currDoc.BuiltInDocumentProperties("Comments")
+End Function
+
+Public Function getAppSpecificVBProject(currDoc as Presentation) As VBProject
+ Set getAppSpecificVBProject = currDoc.VBProject
+End Function
+
+Public Function getAppSpecificOLEClassType(aShape As Shape) As String
+ getAppSpecificOLEClassType = aShape.OLEFormat.ProgID
+End Function
+
+' Workaround as it does not seem to be possible to shut down PP
+' from VB app
+Public Sub QuitPowerPoint()
+ Dim I As Integer
+ On Error Resume Next
+ With Application.Presentations
+ For I = .count To 1 Step -1
+ .item(I).Close
+ Next
+ End With
+ Application.Quit
+End Sub
+
+Public Sub SetAppToMinimized()
+ Application.WindowState = ppWindowMinimized
+End Sub
+
+Public Sub LocalizeResources()
+ On Error GoTo ErrorHandler
+ Dim ppStrings As StringDataManager
+ Set ppStrings = New StringDataManager
+ Dim aPres As Presentation
+ Set aPres = Presentations("_OOoDocAnalysisPPTDriver.ppt")
+ ppStrings.InitStringData (GetResourceDataFileName(aPres.path))
+ LoadCommonStrings ppStrings
+ LoadPPStrings ppStrings
+ LoadResultsStrings ppStrings
+ Set ppStrings = Nothing
+
+ SetPPDriverText
+FinalExit:
+ Exit Sub
+ErrorHandler:
+ WriteDebug "Presentation_Open : " & Err.Number & " : " & Err.Description
+ GoTo FinalExit
+End Sub
+
+Sub SetPPDriverText()
+ On Error Resume Next
+ CAPP_DOCPROP_LOCATION = RID_STR_COMMON_RESULTS_LOCATION_TYPE_PRESENTATION
+ ActivePresentation.Slides.item(1).Shapes.item("RID_STR_DVR_PP_TXT2").OLEFormat.Object.Text = RID_STR_DVR_PP_TXT2
+ ActivePresentation.Slides.item(1).Shapes.item("RID_STR_DVR_PP_TXT3").OLEFormat.Object.Text = RID_STR_DVR_PP_TXT3
+ ActivePresentation.Slides.item(1).Shapes.item("RID_STR_DVR_PP_TXT4").OLEFormat.Object.Text = RID_STR_DVR_PP_TXT4
+ ActivePresentation.Slides.item(1).Shapes.item("RID_STR_DVR_PP_TXT5").OLEFormat.Object.Text = RID_STR_DVR_PP_TXT5
+ ActivePresentation.Slides.item(1).Shapes.item("RID_STR_DVR_PP_TXT6").OLEFormat.Object.Text = RID_STR_DVR_PP_TXT6
+ ActivePresentation.Slides.item(1).Shapes.item("RID_STR_DVR_PP_TXT7").OLEFormat.Object.Text = RID_STR_DVR_PP_TXT7
+ ActivePresentation.Slides.item(1).Shapes.item("RID_STR_DVR_PP_TXT8").OLEFormat.Object.Text = RID_STR_DVR_PP_TXT8
+End Sub
+
+
diff --git a/migrationanalysis/src/driver_docs/sources/powerpoint/Loader.bas b/migrationanalysis/src/driver_docs/sources/powerpoint/Loader.bas
new file mode 100644
index 000000000000..2714aa181b4d
--- /dev/null
+++ b/migrationanalysis/src/driver_docs/sources/powerpoint/Loader.bas
@@ -0,0 +1,64 @@
+Attribute VB_Name = "Loader"
+'/*************************************************************************
+' *
+' * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+' *
+' * Copyright 2008 by Sun Microsystems, Inc.
+' *
+' * OpenOffice.org - a multi-platform office productivity suite
+' *
+' * $RCSfile: Loader.bas,v $
+' *
+' * This file is part of OpenOffice.org.
+' *
+' * OpenOffice.org is free software: you can redistribute it and/or modify
+' * it under the terms of the GNU Lesser General Public License version 3
+' * only, as published by the Free Software Foundation.
+' *
+' * OpenOffice.org is distributed in the hope that it will be useful,
+' * but WITHOUT ANY WARRANTY; without even the implied warranty of
+' * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+' * GNU Lesser General Public License version 3 for more details
+' * (a copy is included in the LICENSE file that accompanied this code).
+' *
+' * You should have received a copy of the GNU Lesser General Public License
+' * version 3 along with OpenOffice.org. If not, see
+' * <http://www.openoffice.org/license.html>
+' * for a copy of the LGPLv3 License.
+' *
+' ************************************************************************/
+
+Option Explicit
+
+Public ppStrings As StringDataManager
+
+Public Sub Presentation_Open()
+ On Error GoTo ErrorHandler
+ Set ppStrings = New StringDataManager
+ Dim aPres As Presentation
+ Set aPres = Presentations("_OOoDocAnalysisPPTDriver.ppt")
+ ppStrings.InitStringData (GetResourceDataFileName(aPres.path))
+ LoadCommonStrings ppStrings
+ LoadPPStrings ppStrings
+ LoadResultsStrings ppStrings
+ Set ppStrings = Nothing
+
+ SetPPDriverText
+FinalExit:
+ Exit Sub
+ErrorHandler:
+ WriteDebug "Presentation_Open : " & Err.Number & " : " & Err.Description
+ GoTo FinalExit
+End Sub
+
+Sub SetPPDriverText()
+ On Error Resume Next
+ CAPP_DOCPROP_LOCATION = RID_STR_COMMON_RESULTS_LOCATION_TYPE_PRESENTATION
+ ActivePresentation.Slides.item(1).Shapes.item("RID_STR_DVR_PP_TXT2").OLEFormat.Object.Text = RID_STR_DVR_PP_TXT2
+ ActivePresentation.Slides.item(1).Shapes.item("RID_STR_DVR_PP_TXT3").OLEFormat.Object.Text = RID_STR_DVR_PP_TXT3
+ ActivePresentation.Slides.item(1).Shapes.item("RID_STR_DVR_PP_TXT4").OLEFormat.Object.Text = RID_STR_DVR_PP_TXT4
+ ActivePresentation.Slides.item(1).Shapes.item("RID_STR_DVR_PP_TXT5").OLEFormat.Object.Text = RID_STR_DVR_PP_TXT5
+ ActivePresentation.Slides.item(1).Shapes.item("RID_STR_DVR_PP_TXT6").OLEFormat.Object.Text = RID_STR_DVR_PP_TXT6
+ ActivePresentation.Slides.item(1).Shapes.item("RID_STR_DVR_PP_TXT7").OLEFormat.Object.Text = RID_STR_DVR_PP_TXT7
+ ActivePresentation.Slides.item(1).Shapes.item("RID_STR_DVR_PP_TXT8").OLEFormat.Object.Text = RID_STR_DVR_PP_TXT8
+End Sub
diff --git a/migrationanalysis/src/driver_docs/sources/powerpoint/MigrationAnalyser.cls b/migrationanalysis/src/driver_docs/sources/powerpoint/MigrationAnalyser.cls
new file mode 100644
index 000000000000..babc26ddf8ed
--- /dev/null
+++ b/migrationanalysis/src/driver_docs/sources/powerpoint/MigrationAnalyser.cls
@@ -0,0 +1,826 @@
+VERSION 1.0 CLASS
+BEGIN
+ MultiUse = -1 'True
+END
+Attribute VB_Name = "MigrationAnalyser"
+Attribute VB_GlobalNameSpace = False
+Attribute VB_Creatable = False
+Attribute VB_PredeclaredId = False
+Attribute VB_Exposed = False
+'/*************************************************************************
+' *
+' * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+' *
+' * Copyright 2008 by Sun Microsystems, Inc.
+' *
+' * OpenOffice.org - a multi-platform office productivity suite
+' *
+' * $RCSfile: MigrationAnalyser.cls,v $
+' *
+' * This file is part of OpenOffice.org.
+' *
+' * OpenOffice.org is free software: you can redistribute it and/or modify
+' * it under the terms of the GNU Lesser General Public License version 3
+' * only, as published by the Free Software Foundation.
+' *
+' * OpenOffice.org is distributed in the hope that it will be useful,
+' * but WITHOUT ANY WARRANTY; without even the implied warranty of
+' * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+' * GNU Lesser General Public License version 3 for more details
+' * (a copy is included in the LICENSE file that accompanied this code).
+' *
+' * You should have received a copy of the GNU Lesser General Public License
+' * version 3 along with OpenOffice.org. If not, see
+' * <http://www.openoffice.org/license.html>
+' * for a copy of the LGPLv3 License.
+' *
+' ************************************************************************/
+
+Option Explicit
+
+
+Private mAnalysis As DocumentAnalysis
+
+'***ADDING-ISSUE: Use Following Skeleton as Guideline for Adding Issue
+' For complete list of all RID_STR_... for Issues (IssueType), SubIssues (SubType) and Attributes refer to:
+' powerpoint_res.bas and common_res.bas
+'
+' For complete list of all CID_... for Issue Categories(IssueID) and
+' CSTR_... for XML Issues (IssueTypeXML) and XML SubIssues (SubTypeXML) refer to:
+' ApplicationSpecific.bas and CommonMigrationAnalyser.bas
+'
+' You should not have to add any new Issue Categories or matching IssueTypes, only new SubIssues
+Sub Analyze_SKELETON()
+ On Error GoTo HandleErrors
+ Dim currentFunctionName As String
+ currentFunctionName = "Analyze_SKELETON"
+ Dim myIssue As IssueInfo
+ Set myIssue = New IssueInfo
+
+ With myIssue
+ .IssueID = CID_VBA_MACROS 'Issue Category
+ .IssueType = RID_STR_COMMON_ISSUE_VBA_MACROS 'Issue String
+ .SubType = RID_STR_COMMON_SUBISSUE_PROPERTIES 'SubIssue String
+ .Location = .CLocationDocument 'Location string
+
+ .IssueTypeXML = CSTR_ISSUE_VBA_MACROS 'Non localised XML Issue String
+ .SubTypeXML = CSTR_SUBISSUE_PROPERTIES 'Non localised XML SubIssue String
+ .locationXML = .CXMLLocationDocument 'Non localised XML location
+
+ .SubLocation = 0 'if not set will default to RID_STR_NOT_AVAILABLE_SHORTHAND
+ .Line = 0 'if not set will default to RID_STR_NOT_AVAILABLE_SHORTHAND
+ .column = 0 'if not set will default to RID_STR_NOT_AVAILABLE_SHORTHAND
+
+ ' Add as many Attribute Value pairs as needed
+ ' Note: following must always be true - Attributes.Count = Values.Count
+ .Attributes.Add "AAA"
+ .Values.Add "foobar"
+
+ ' Use AddIssueDetailsNote to add notes to the Issue Details if required
+ ' Public Sub AddIssueDetailsNote(myIssue As IssueInfo, noteNum As Long, noteStr As String, _
+ ' Optional preStr As String = RID_STR_COMMON_NOTE_PRE)
+ ' Where preStr is prepended to the output, with "Note" as the default
+ AddIssueDetailsNote myIssue, 0, RID_STR_COMMON_NOTE_DOCUMENT_PROPERTIES_LOST
+
+ mAnalysis.IssuesCountArray(CID_VBA_MACROS) = _
+ mAnalysis.IssuesCountArray(CID_VBA_MACROS) + 1
+ End With
+
+ mAnalysis.Issues.Add myIssue
+
+FinalExit:
+ Set myIssue = Nothing
+ Exit Sub
+
+HandleErrors:
+ WriteDebug currentFunctionName & " : " & mAnalysis.name & ": " & Err.Number & " " & Err.Description & " " & Err.Source
+ Resume FinalExit
+End Sub
+
+Sub DoAnalyse(fileName As String, userFormTypesDict As Scripting.Dictionary, _
+ startDir As String, storeToDir As String, fso As FileSystemObject)
+ On Error GoTo HandleErrors
+ Dim containsInvalidChar As Boolean
+ containsInvalidChar = False
+ Dim currentFunctionName As String
+ currentFunctionName = "DoAnalyse"
+ mAnalysis.name = fileName
+ Dim aPres As Presentation
+ mAnalysis.TotalIssueTypes = CTOTAL_CATEGORIES
+
+ If InStr(fileName, "[") = 0 And InStr(fileName, "]") = 0 Then 'If fileName does not contain [ AND ]
+ containsInvalidChar = False
+ Else
+ containsInvalidChar = True
+ End If
+
+ 'Cannot Turn off any AutoExce macros before loading the Presentation
+ 'WordBasic.DisableAutoMacros 1
+ 'On Error GoTo HandleErrors
+
+ On Error Resume Next ' Ignore errors on setting
+ If containsInvalidChar = True Then
+ GoTo HandleErrors
+ End If
+ Set aPres = Presentations.Open(fileName:=fileName, ReadOnly:=True)
+ If Err.Number <> 0 Then
+ mAnalysis.Application = RID_STR_COMMON_CANNOT_OPEN
+ GoTo HandleErrors
+ End If
+ On Error GoTo HandleErrors
+
+ 'MsgBox "Window: " & PPViewType(aPres.Windows(1).viewType) & _
+ ' " Pane: " & PPViewType(aPres.Windows(1).ActivePane.viewType)
+
+ 'Set Doc Properties
+ SetDocProperties mAnalysis, aPres, fso
+
+ Analyze_SlideIssues aPres
+ Analyze_Macros mAnalysis, userFormTypesDict, aPres
+
+ ' Doc Preparation only
+ ' Save document with any fixed issues under <storeToDir>\prepared\<source doc name>
+ If mAnalysis.PreparableIssuesCount > 0 And CheckDoPrepare Then
+ Dim preparedFullPath As String
+ preparedFullPath = GetPreparedFullPath(mAnalysis.name, startDir, storeToDir, fso)
+ If preparedFullPath <> "" Then
+ If fso.FileExists(preparedFullPath) Then
+ fso.DeleteFile preparedFullPath, True
+ End If
+ If fso.FolderExists(fso.GetParentFolderName(preparedFullPath)) Then
+ aPres.SaveAs preparedFullPath
+ End If
+ End If
+ End If
+
+FinalExit:
+ If Not aPres Is Nothing Then 'If Not IsEmpty(aDoc) Then
+ aPres.Saved = True
+ aPres.Close
+ End If
+ Set aPres = Nothing
+ Exit Sub
+
+HandleErrors:
+ If containsInvalidChar = False Then
+ WriteDebug currentFunctionName & " : " & mAnalysis.name & ": " & Err.Number & " " & Err.Description & " " & Err.Source
+ Else
+ WriteDebug currentFunctionName & " : " & mAnalysis.name & ": The file name contains the invalid character [ or ]. Please change the file name and run analysis again."
+ End If
+ Resume FinalExit
+End Sub
+
+Sub SetDocProperties(docAnalysis As DocumentAnalysis, pres As Presentation, fso As FileSystemObject)
+ On Error GoTo HandleErrors
+ Dim currentFunctionName As String
+ currentFunctionName = "SetDocProperties"
+ Dim f As File
+ Set f = fso.GetFile(docAnalysis.name)
+
+ Const appPropertyAppName = 9
+ Const appPropertyLastAuthor = 7
+ Const appPropertyRevision = 8
+ Const appPropertyTemplate = 6
+ Const appPropertyTimeCreated = 11
+ Const appPropertyTimeLastSaved = 12
+
+ On Error Resume Next
+ docAnalysis.PageCount = pres.Slides.count
+ docAnalysis.Created = f.DateCreated
+ docAnalysis.Modified = f.DateLastModified
+ docAnalysis.Accessed = f.DateLastAccessed
+ docAnalysis.Printed = DateValue("01/01/1900")
+
+ On Error Resume Next 'Some apps may not support all props
+ DocAnalysis.Application = getAppSpecificApplicationName & " " & Application.Version
+
+ 'docAnalysis.Application = pres.BuiltInDocumentProperties(appPropertyAppName)
+ 'If InStr(docAnalysis.Application, "Microsoft") = 1 Then
+ ' docAnalysis.Application = Mid(docAnalysis.Application, Len("Microsoft") + 2)
+ 'End If
+ 'If InStr(Len(docAnalysis.Application) - 2, docAnalysis.Application, ".") = 0 Then
+ ' docAnalysis.Application = docAnalysis.Application & " " & Application.Version
+ 'End If
+
+ docAnalysis.SavedBy = _
+ pres.BuiltInDocumentProperties(appPropertyLastAuthor)
+ docAnalysis.Revision = _
+ val(pres.BuiltInDocumentProperties(appPropertyRevision))
+ docAnalysis.Template = _
+ fso.GetFileName(pres.BuiltInDocumentProperties(appPropertyTemplate))
+
+FinalExit:
+ Set f = Nothing
+ Exit Sub
+
+HandleErrors:
+ WriteDebug currentFunctionName & " : " & mAnalysis.name & ": " & Err.Number & " " & Err.Description & " " & Err.Source
+ Resume FinalExit
+End Sub
+
+Function PPViewType(viewType As PPViewType) As String
+
+ Select Case viewType
+ Case ppViewHandoutMaster
+ PPViewType = RID_STR_PP_ENUMERATION_VIEW_HANDOUT_MASTER
+ Case ppViewNormal
+ PPViewType = RID_STR_PP_ENUMERATION_VIEW_NORMAL
+ Case ppViewNotesMaster
+ PPViewType = RID_STR_PP_ENUMERATION_VIEW_NOTES_MASTER
+ Case ppViewNotesPage
+ PPViewType = RID_STR_PP_ENUMERATION_VIEW_NOTES_PAGE
+ Case ppViewOutline
+ PPViewType = RID_STR_PP_ENUMERATION_VIEW_OUTLINE
+ Case ppViewSlide
+ PPViewType = RID_STR_PP_ENUMERATION_VIEW_SLIDE
+ Case ppViewSlideMaster
+ PPViewType = RID_STR_PP_ENUMERATION_VIEW_SLIDE_MASTER
+ Case ppViewSlideSorter
+ PPViewType = RID_STR_PP_ENUMERATION_VIEW_SLIDE_SORTER
+ Case ppViewTitleMaster
+ PPViewType = RID_STR_PP_ENUMERATION_VIEW_TITLE_MASTER
+ Case Else
+ PPViewType = RID_STR_PP_ENUMERATION_UNKNOWN
+ End Select
+End Function
+
+Sub Analyze_SlideIssues(curPresentation As Presentation)
+ On Error GoTo HandleErrors
+ Dim currentFunctionName As String
+ currentFunctionName = "Analyze_SlideIssues"
+
+ Dim mySlide As Slide
+ Dim SlideNum As Integer
+
+ SlideNum = 1
+ For Each mySlide In curPresentation.Slides
+ ActiveWindow.View.GotoSlide index:=SlideNum
+ Analyze_ShapeIssues mySlide
+ Analyze_Hyperlinks mySlide
+ Analyze_Templates mySlide
+ SlideNum = SlideNum + 1
+ Next mySlide
+
+ Analyze_TabStops curPresentation
+
+ Exit Sub
+HandleErrors:
+ WriteDebug currentFunctionName & " : " & mAnalysis.name & ": " & Err.Number & " " & Err.Description & " " & Err.Source
+End Sub
+
+Sub Analyze_TabStops(curPresentation As Presentation)
+ On Error GoTo HandleErrors
+ Dim currentFunctionName As String
+ currentFunctionName = "Analyze_TabStops"
+
+ 'Dim firstSlide As Slide
+ 'Dim firstShape As Shape
+ Dim mySlide As Slide
+ Dim myShape As Shape
+ Dim bInitialized, bHasDifferentDefaults As Boolean
+ Dim curDefault, lastDefault As Single
+
+ bInitialized = False
+ bHasDifferentDefaults = False
+
+ For Each mySlide In curPresentation.Slides
+ For Each myShape In mySlide.Shapes
+ If myShape.HasTextFrame Then
+ If myShape.TextFrame.HasText Then
+ curDefault = myShape.TextFrame.Ruler.TabStops.DefaultSpacing
+ If Not bInitialized Then
+ bInitialized = True
+ lastDefault = curDefault
+ 'Set firstSlide = mySlide
+ 'Set firstShape = myShape
+ End If
+ If curDefault <> lastDefault Then
+ bHasDifferentDefaults = True
+ Exit For
+ End If
+ End If
+ End If
+ Next myShape
+ If bHasDifferentDefaults Then Exit For
+ Next mySlide
+
+ If Not bHasDifferentDefaults Then Exit Sub
+
+ Dim myIssue As IssueInfo
+ Set myIssue = New IssueInfo
+
+ With myIssue
+ .IssueID = CID_CONTENT_AND_DOCUMENT_PROPERTIES
+ .IssueType = RID_STR_COMMON_ISSUE_CONTENT_AND_DOCUMENT_PROPERTIES
+ .SubType = RID_RESXLS_COST_Tabstop
+ .Location = .CLocationSlide
+
+ .IssueTypeXML = CSTR_ISSUE_CONTENT_DOCUMENT_PROPERTIES
+ .SubTypeXML = CSTR_SUBISSUE_TABSTOP
+ .locationXML = .CXMLLocationSlide
+
+ .SubLocation = mySlide.name
+ .Line = myShape.top
+ .column = myShape.Left
+
+ .Attributes.Add RID_STR_COMMON_ATTRIBUTE_NAME
+ .Values.Add myShape.name
+
+ AddIssueDetailsNote myIssue, 0, RID_STR_PP_SUBISSUE_TABSTOP_NOTE
+
+ mAnalysis.IssuesCountArray(CID_CONTENT_AND_DOCUMENT_PROPERTIES) = _
+ mAnalysis.IssuesCountArray(CID_CONTENT_AND_DOCUMENT_PROPERTIES) + 1
+ End With
+
+ mAnalysis.Issues.Add myIssue
+
+FinalExit:
+ Set myIssue = Nothing
+ Exit Sub
+
+HandleErrors:
+ WriteDebug currentFunctionName & " : " & mAnalysis.name & ": " & Err.Number & " " & Err.Description & " " & Err.Source
+ Resume FinalExit
+End Sub
+
+Sub Analyze_Fonts(curPresentation As Presentation)
+ On Error GoTo HandleErrors
+ Dim currentFunctionName As String
+ currentFunctionName = "Analyze_Fonts"
+
+ Dim myFont As Font
+ Dim bHasEmbeddedFonts As Boolean
+
+ bHasEmbeddedFonts = False
+ For Each myFont In curPresentation.Fonts
+ If myFont.Embedded Then
+ bHasEmbeddedFonts = True
+ Exit For
+ End If
+ Next
+
+ If Not bHasEmbeddedFonts Then Exit Sub
+
+ Dim myIssue As IssueInfo
+ Set myIssue = New IssueInfo
+
+ With myIssue
+ .IssueID = CID_CONTENT_AND_DOCUMENT_PROPERTIES
+ .IssueType = RID_STR_COMMON_ISSUE_CONTENT_AND_DOCUMENT_PROPERTIES
+ .SubType = RID_STR_PP_SUBISSUE_FONTS
+ .Location = .CLocationSlide
+
+ .IssueTypeXML = CSTR_ISSUE_CONTENT_DOCUMENT_PROPERTIES
+ .SubTypeXML = CSTR_SUBISSUE_FONTS
+ .locationXML = .CXMLLocationSlide
+
+ .SubLocation = mySlide.name
+ .Line = myShape.top
+ .column = myShape.Left
+
+ .Attributes.Add RID_STR_COMMON_ATTRIBUTE_NAME
+ .Values.Add myShape.name
+
+ AddIssueDetailsNote myIssue, 0, RID_STR_PP_SUBISSUE_FONTS_NOTE
+
+ mAnalysis.IssuesCountArray(CID_CONTENT_AND_DOCUMENT_PROPERTIES) = _
+ mAnalysis.IssuesCountArray(CID_CONTENT_AND_DOCUMENT_PROPERTIES) + 1
+ End With
+
+ mAnalysis.Issues.Add myIssue
+
+FinalExit:
+ Set myIssue = Nothing
+ Exit Sub
+
+HandleErrors:
+ WriteDebug currentFunctionName & " : " & mAnalysis.name & ": " & Err.Number & " " & Err.Description & " " & Err.Source
+ Resume FinalExit
+End Sub
+
+Sub Analyze_Templates(mySlide As Slide)
+ On Error GoTo HandleErrors
+ Dim currentFunctionName As String
+ currentFunctionName = "Analyze_Templates"
+
+ If mySlide.Layout <> ppLayoutTitle Then Exit Sub
+
+ Dim myIssue As IssueInfo
+ Set myIssue = New IssueInfo
+
+ With myIssue
+ .IssueID = CID_CONTENT_AND_DOCUMENT_PROPERTIES
+ .IssueType = RID_STR_COMMON_ISSUE_CONTENT_AND_DOCUMENT_PROPERTIES
+ .SubType = RID_RESXLS_COST_Template
+ .Location = .CLocationSlide
+
+ .IssueTypeXML = CSTR_ISSUE_CONTENT_DOCUMENT_PROPERTIES
+ .SubTypeXML = CSTR_SUBISSUE_TEMPLATE
+ .locationXML = .CXMLLocationSlide
+ .SubLocation = mySlide.name
+
+ '.Attributes.Add RID_STR_COMMON_ATTRIBUTE_NAME
+ '.Values.Add mySlide.name
+
+ AddIssueDetailsNote myIssue, 0, RID_STR_PP_SUBISSUE_TEMPLATE_NOTE
+
+ mAnalysis.IssuesCountArray(CID_CONTENT_AND_DOCUMENT_PROPERTIES) = _
+ mAnalysis.IssuesCountArray(CID_CONTENT_AND_DOCUMENT_PROPERTIES) + 1
+ End With
+
+ mAnalysis.Issues.Add myIssue
+
+FinalExit:
+ Set myIssue = Nothing
+ Exit Sub
+
+HandleErrors:
+ WriteDebug currentFunctionName & " : " & mAnalysis.name & ": " & Err.Number & " " & Err.Description & " " & Err.Source
+ Resume FinalExit
+End Sub
+
+Sub Analyze_Hyperlinks(mySlide As Slide)
+ On Error GoTo HandleErrors
+ Dim currentFunctionName As String
+ currentFunctionName = "Analyze_Hyperlinks"
+
+ Dim myIssue As IssueInfo
+ Dim hl As Hyperlink
+ Dim bHasMultipleFonts As Boolean
+ Dim bHasMultipleLines As Boolean
+
+ bHasMultipleFonts = False
+ bHasMultipleLines = False
+
+ For Each hl In mySlide.Hyperlinks
+ If TypeName(hl.Parent.Parent) = "TextRange" Then
+ Dim myTextRange As TextRange
+ Dim currRun As TextRange
+ Dim currLine As TextRange
+ Dim first, last, noteCount As Long
+
+ Set myTextRange = hl.Parent.Parent
+ first = myTextRange.start
+ last = first + myTextRange.Length - 1
+
+ For Each currRun In myTextRange.Runs
+ If (currRun.start > first And currRun.start < last) Then
+ bHasMultipleFonts = True
+ Exit For
+ End If
+ Next
+
+ For Each currLine In myTextRange.Lines
+ Dim lineEnd As Long
+ lineEnd = currLine.start + currLine.Length - 1
+ If (first <= lineEnd And last > lineEnd) Then
+ bHasMultipleLines = True
+ Exit For
+ End If
+ Next
+ End If
+
+ noteCount = 0
+
+ If bHasMultipleFonts Then
+ Set myIssue = New IssueInfo
+
+ With myIssue
+ .IssueID = CID_CONTENT_AND_DOCUMENT_PROPERTIES
+ .IssueType = RID_STR_COMMON_ISSUE_CONTENT_AND_DOCUMENT_PROPERTIES
+ .SubType = RID_RESXLS_COST_Hyperlink
+ .Location = .CLocationSlide
+
+ .IssueTypeXML = CSTR_ISSUE_CONTENT_DOCUMENT_PROPERTIES
+ .SubTypeXML = CSTR_SUBISSUE_HYPERLINK
+ .locationXML = .CXMLLocationSlide
+ .SubLocation = mySlide.name
+
+ .Attributes.Add RID_STR_COMMON_ATTRIBUTE_NAME
+ .Values.Add myTextRange.Text
+
+ AddIssueDetailsNote myIssue, 0, RID_STR_PP_SUBISSUE_HYPERLINK_NOTE
+
+ mAnalysis.IssuesCountArray(CID_CONTENT_AND_DOCUMENT_PROPERTIES) = _
+ mAnalysis.IssuesCountArray(CID_CONTENT_AND_DOCUMENT_PROPERTIES) + 1
+ End With
+ mAnalysis.Issues.Add myIssue
+ Set myIssue = Nothing
+ bHasMultipleFonts = False
+ End If
+ If bHasMultipleLines Then
+ Set myIssue = New IssueInfo
+
+ With myIssue
+ .IssueID = CID_CONTENT_AND_DOCUMENT_PROPERTIES
+ .IssueType = RID_STR_COMMON_ISSUE_CONTENT_AND_DOCUMENT_PROPERTIES
+ .SubType = RID_RESXLS_COST_HyperlinkSplit
+ .Location = .CLocationSlide
+
+ .IssueTypeXML = CSTR_ISSUE_CONTENT_DOCUMENT_PROPERTIES
+ .SubTypeXML = CSTR_SUBISSUE_HYPERLINK_SPLIT
+ .locationXML = .CXMLLocationSlide
+ .SubLocation = mySlide.name
+
+ .Attributes.Add RID_STR_COMMON_ATTRIBUTE_NAME
+ .Values.Add myTextRange.Text
+
+ AddIssueDetailsNote myIssue, 0, RID_STR_PP_SUBISSUE_HYPERLINK_SPLIT_NOTE
+
+ mAnalysis.IssuesCountArray(CID_CONTENT_AND_DOCUMENT_PROPERTIES) = _
+ mAnalysis.IssuesCountArray(CID_CONTENT_AND_DOCUMENT_PROPERTIES) + 1
+ End With
+ mAnalysis.Issues.Add myIssue
+ Set myIssue = Nothing
+ bHasMultipleLines = False
+ End If
+ Next
+
+FinalExit:
+ Set myIssue = Nothing
+ Exit Sub
+
+HandleErrors:
+ WriteDebug currentFunctionName & " : " & mAnalysis.name & ": " & Err.Number & " " & Err.Description & " " & Err.Source
+ Resume FinalExit
+End Sub
+
+Sub Analyze_ShapeIssues(mySlide As Slide)
+ On Error GoTo HandleErrors
+ Dim currentFunctionName As String
+ currentFunctionName = "Analyze_ShapeIssues"
+ Dim myShape As Shape
+
+ For Each myShape In mySlide.Shapes
+ 'myShape.Select msoTrue
+ Analyze_Movie mySlide, myShape
+ Analyze_Comments mySlide, myShape
+ Analyze_Background mySlide, myShape
+ Analyze_Numbering mySlide, myShape
+ 'Analyze global issues
+ Analyze_OLEEmbeddedSingleShape mAnalysis, myShape, mySlide.name
+ Analyze_Lines mAnalysis, myShape, mySlide.name
+ Analyze_Transparency mAnalysis, myShape, mySlide.name
+ Analyze_Gradients mAnalysis, myShape, mySlide.name
+ Next myShape
+
+ Exit Sub
+HandleErrors:
+ WriteDebug currentFunctionName & " : " & mAnalysis.name & ": " & Err.Number & " " & Err.Description & " " & Err.Source
+End Sub
+
+Sub Analyze_Numbering(mySlide As Slide, myShape As Shape)
+ On Error GoTo HandleErrors
+ Dim currentFunctionName As String
+ currentFunctionName = "Analyze_Numbering"
+
+ If Not myShape.HasTextFrame Then Exit Sub
+ If Not myShape.TextFrame.HasText Then Exit Sub
+ Dim shapeText As TextRange
+
+ Set shapeText = myShape.TextFrame.TextRange
+
+ If shapeText.Paragraphs.count < 2 Then Exit Sub
+ If Not (shapeText.ParagraphFormat.Bullet.Type = ppBulletMixed Or _
+ shapeText.ParagraphFormat.Bullet.Type = ppBulletNumbered) Then Exit Sub
+
+ ' OpenOffice has Problems when the numbering does not start with the first
+ ' paragraph or when there are empty paragraphs which do not have a number.
+ ' Because PowerPoint does not give us the length of each paragraph ( .Length
+ ' does not work ), we have to compute the length ourself.
+
+ Dim I As Long
+ Dim lastType As PpBulletType
+ Dim currType As PpBulletType
+ Dim lastStart As Long
+ Dim lastLength As Long
+ Dim currStart As Long
+ Dim bHasNumProblem As Boolean
+ Dim bHasEmptyPar As Boolean
+
+ bHasNumProblem = False
+ bHasEmptyPar = False
+
+ lastType = shapeText.Paragraphs(1, 0).ParagraphFormat.Bullet.Type
+ lastStart = shapeText.Paragraphs(1, 0).start
+
+ For I = 2 To shapeText.Paragraphs.count
+ currType = shapeText.Paragraphs(I, 0).ParagraphFormat.Bullet.Type
+ currStart = shapeText.Paragraphs(I, 0).start
+ lastLength = currStart - lastStart - 1
+
+ If currType <> lastType Then
+ lastType = currType
+ If currType = ppBulletNumbered Then
+ bHasNumProblem = True
+ Exit For
+ End If
+ End If
+ If lastLength = 0 Then
+ bHasEmptyPar = True
+ Else
+ If (bHasEmptyPar) Then
+ bHasNumProblem = True
+ Exit For
+ End If
+ End If
+ lastStart = currStart
+ Next I
+
+ lastLength = shapeText.Length - lastStart
+ If (lastLength <> 0) And bHasEmptyPar Then
+ bHasNumProblem = True
+ End If
+
+ If Not bHasNumProblem Then Exit Sub
+
+ Dim myIssue As IssueInfo
+ Set myIssue = New IssueInfo
+
+ With myIssue
+ .IssueID = CID_CONTENT_AND_DOCUMENT_PROPERTIES
+ .IssueType = RID_STR_COMMON_ISSUE_CONTENT_AND_DOCUMENT_PROPERTIES
+ .SubType = RID_RESXLS_COST_Numbering
+ .Location = .CLocationSlide
+
+ .IssueTypeXML = CSTR_ISSUE_CONTENT_DOCUMENT_PROPERTIES
+ .SubTypeXML = CSTR_SUBISSUE_NUMBERING
+ .locationXML = .CXMLLocationSlide
+
+ .SubLocation = mySlide.name
+ .Line = myShape.top
+ .column = myShape.Left
+
+ .Attributes.Add RID_STR_COMMON_ATTRIBUTE_NAME
+ .Values.Add myShape.name
+
+ AddIssueDetailsNote myIssue, 0, RID_STR_PP_SUBISSUE_NUMBERING_NOTE
+
+ mAnalysis.IssuesCountArray(CID_CONTENT_AND_DOCUMENT_PROPERTIES) = _
+ mAnalysis.IssuesCountArray(CID_CONTENT_AND_DOCUMENT_PROPERTIES) + 1
+ End With
+
+ mAnalysis.Issues.Add myIssue
+
+FinalExit:
+ Set myIssue = Nothing
+ Exit Sub
+
+HandleErrors:
+ WriteDebug currentFunctionName & " : " & mAnalysis.name & ": " & Err.Number & " " & Err.Description & " " & Err.Source
+ Resume FinalExit
+End Sub
+
+Sub Analyze_Background(mySlide As Slide, myShape As Shape)
+ On Error GoTo HandleErrors
+ Dim currentFunctionName As String
+ currentFunctionName = "Analyze_Background"
+
+ If myShape.Fill.Type <> msoFillBackground Then Exit Sub
+
+ Dim myIssue As IssueInfo
+ Set myIssue = New IssueInfo
+ Dim strCr As String
+ strCr = "" & vbCr
+
+ With myIssue
+ .IssueID = CID_CONTENT_AND_DOCUMENT_PROPERTIES
+ .IssueType = RID_STR_COMMON_ISSUE_CONTENT_AND_DOCUMENT_PROPERTIES
+ .SubType = RID_RESXLS_COST_Background
+ .Location = .CLocationSlide
+
+ .IssueTypeXML = CSTR_ISSUE_CONTENT_DOCUMENT_PROPERTIES
+ .SubTypeXML = CSTR_SUBISSUE_BACKGROUND
+ .locationXML = .CXMLLocationSlide
+
+ .SubLocation = mySlide.name
+ .Line = myShape.top
+ .column = myShape.Left
+
+ .Attributes.Add RID_STR_COMMON_ATTRIBUTE_NAME
+ .Values.Add myShape.name
+
+ AddIssueDetailsNote myIssue, 0, RID_STR_PP_SUBISSUE_BACKGROUND_NOTE
+
+ mAnalysis.IssuesCountArray(CID_CONTENT_AND_DOCUMENT_PROPERTIES) = _
+ mAnalysis.IssuesCountArray(CID_CONTENT_AND_DOCUMENT_PROPERTIES) + 1
+ End With
+
+ mAnalysis.Issues.Add myIssue
+
+FinalExit:
+ Set myIssue = Nothing
+ Exit Sub
+
+HandleErrors:
+ WriteDebug currentFunctionName & " : " & mAnalysis.name & ": " & Err.Number & " " & Err.Description & " " & Err.Source
+ Resume FinalExit
+End Sub
+
+Sub Analyze_Comments(mySlide As Slide, myShape As Shape)
+ On Error GoTo HandleErrors
+ Dim currentFunctionName As String
+ currentFunctionName = "Analyze_Comments"
+
+ If myShape.Type <> msoComment Then Exit Sub
+
+ Dim myIssue As IssueInfo
+ Set myIssue = New IssueInfo
+ Dim strCr As String
+ strCr = "" & vbCr
+
+ With myIssue
+ .IssueID = CID_CONTENT_AND_DOCUMENT_PROPERTIES
+ .IssueType = RID_STR_COMMON_ISSUE_CONTENT_AND_DOCUMENT_PROPERTIES
+ .SubType = RID_STR_PP_SUBISSUE_COMMENT
+ .Location = .CLocationSlide
+
+ .IssueTypeXML = CSTR_ISSUE_CONTENT_DOCUMENT_PROPERTIES
+ .SubTypeXML = CSTR_SUBISSUE_COMMENT
+ .locationXML = .CXMLLocationSlide
+
+ .SubLocation = mySlide.name
+ .Line = myShape.top
+ .column = myShape.Left
+
+ .Attributes.Add RID_STR_COMMON_ATTRIBUTE_NAME
+ .Values.Add myShape.name
+ .Attributes.Add RID_STR_PP_ATTRIBUTE_CONTENT
+ .Values.Add Replace(myShape.TextFrame.TextRange.Text, strCr, "")
+
+ mAnalysis.IssuesCountArray(CID_CONTENT_AND_DOCUMENT_PROPERTIES) = _
+ mAnalysis.IssuesCountArray(CID_CONTENT_AND_DOCUMENT_PROPERTIES) + 1
+ End With
+
+ mAnalysis.Issues.Add myIssue
+
+FinalExit:
+ Set myIssue = Nothing
+ Exit Sub
+
+HandleErrors:
+ WriteDebug currentFunctionName & " : " & mAnalysis.name & ": " & Err.Number & " " & Err.Description & " " & Err.Source
+ Resume FinalExit
+End Sub
+Sub Analyze_Movie(mySlide As Slide, myShape As Shape)
+ On Error GoTo HandleErrors
+ Dim currentFunctionName As String
+ currentFunctionName = "Analyze_Movie"
+
+ If myShape.Type <> msoMedia Then Exit Sub
+ If myShape.MediaType <> ppMediaTypeMovie Then Exit Sub
+
+ Dim myIssue As IssueInfo
+ Set myIssue = New IssueInfo
+
+ With myIssue
+ .IssueID = CID_OBJECTS_GRAPHICS_TEXTBOXES
+ .IssueType = RID_STR_PP_ISSUE_OBJECTS_GRAPHICS_AND_TEXTBOXES
+ .SubType = RID_STR_PP_SUBISSUE_MOVIE
+ .Location = .CLocationSlide
+
+ .IssueTypeXML = CSTR_ISSUE_OBJECTS_GRAPHICS_AND_TEXTBOXES
+ .SubTypeXML = CSTR_SUBISSUE_MOVIE
+ .locationXML = .CXMLLocationSlide
+
+ .SubLocation = mySlide.name
+ .Line = myShape.top
+ .column = myShape.Left
+
+ .Attributes.Add RID_STR_COMMON_ATTRIBUTE_NAME
+ .Values.Add myShape.name
+ .Attributes.Add RID_STR_COMMON_ATTRIBUTE_SOURCE
+ .Values.Add myShape.LinkFormat.SourceFullName
+ .Attributes.Add RID_STR_PP_ATTRIBUTE_PLAYONENTRY
+ .Values.Add IIf(myShape.AnimationSettings.PlaySettings.PlayOnEntry, RID_STR_PP_TRUE, RID_STR_PP_FALSE)
+ .Attributes.Add RID_STR_PP_ATTRIBUTE_LOOP
+ .Values.Add IIf(myShape.AnimationSettings.PlaySettings.LoopUntilStopped, RID_STR_PP_TRUE, RID_STR_PP_FALSE)
+ .Attributes.Add RID_STR_PP_ATTRIBUTE_REWIND
+ .Values.Add IIf(myShape.AnimationSettings.PlaySettings.RewindMovie, RID_STR_PP_TRUE, RID_STR_PP_FALSE)
+
+ mAnalysis.IssuesCountArray(CID_OBJECTS_GRAPHICS_TEXTBOXES) = _
+ mAnalysis.IssuesCountArray(CID_OBJECTS_GRAPHICS_TEXTBOXES) + 1
+ End With
+
+ mAnalysis.Issues.Add myIssue
+
+FinalExit:
+ Set myIssue = Nothing
+ Exit Sub
+
+HandleErrors:
+ WriteDebug currentFunctionName & " : " & mAnalysis.name & ": " & Err.Number & " " & Err.Description & " " & Err.Source
+ Resume FinalExit
+End Sub
+
+Private Sub Class_Initialize()
+ Set mAnalysis = New DocumentAnalysis
+End Sub
+Private Sub Class_Terminate()
+ Set mAnalysis = Nothing
+End Sub
+
+Public Property Get Results() As DocumentAnalysis
+ Set Results = mAnalysis
+End Property
+
diff --git a/migrationanalysis/src/driver_docs/sources/powerpoint/Preparation.bas b/migrationanalysis/src/driver_docs/sources/powerpoint/Preparation.bas
new file mode 100644
index 000000000000..d5fa4a10b260
--- /dev/null
+++ b/migrationanalysis/src/driver_docs/sources/powerpoint/Preparation.bas
@@ -0,0 +1,43 @@
+Attribute VB_Name = "Preparation"
+'/*************************************************************************
+' *
+' * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+' *
+' * Copyright 2008 by Sun Microsystems, Inc.
+' *
+' * OpenOffice.org - a multi-platform office productivity suite
+' *
+' * $RCSfile: Preparation.bas,v $
+' *
+' * This file is part of OpenOffice.org.
+' *
+' * OpenOffice.org is free software: you can redistribute it and/or modify
+' * it under the terms of the GNU Lesser General Public License version 3
+' * only, as published by the Free Software Foundation.
+' *
+' * OpenOffice.org is distributed in the hope that it will be useful,
+' * but WITHOUT ANY WARRANTY; without even the implied warranty of
+' * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+' * GNU Lesser General Public License version 3 for more details
+' * (a copy is included in the LICENSE file that accompanied this code).
+' *
+' * You should have received a copy of the GNU Lesser General Public License
+' * version 3 along with OpenOffice.org. If not, see
+' * <http://www.openoffice.org/license.html>
+' * for a copy of the LGPLv3 License.
+' *
+' ************************************************************************/
+
+Option Explicit
+
+'Stub for Word Prepare H&F
+Function Prepare_HeaderFooter_GraphicFrames(docAnalysis As DocumentAnalysis, myIssue As IssueInfo, _
+ var As Variant, currDoc As Presentation) As Boolean
+ Prepare_HeaderFooter_GraphicFrames = False
+End Function
+
+'Stub for Excel Prepare SheetName
+Function Prepare_WorkbookVersion() As Boolean
+ Prepare_WorkbookVersion = False
+End Function
+
diff --git a/migrationanalysis/src/driver_docs/sources/powerpoint/Slide1.cls b/migrationanalysis/src/driver_docs/sources/powerpoint/Slide1.cls
new file mode 100644
index 000000000000..4cafcf4afab2
--- /dev/null
+++ b/migrationanalysis/src/driver_docs/sources/powerpoint/Slide1.cls
@@ -0,0 +1,56 @@
+'/*************************************************************************
+' *
+' * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+' *
+' * Copyright 2008 by Sun Microsystems, Inc.
+' *
+' * OpenOffice.org - a multi-platform office productivity suite
+' *
+' * $RCSfile: Slide1.cls,v $
+' *
+' * This file is part of OpenOffice.org.
+' *
+' * OpenOffice.org is free software: you can redistribute it and/or modify
+' * it under the terms of the GNU Lesser General Public License version 3
+' * only, as published by the Free Software Foundation.
+' *
+' * OpenOffice.org is distributed in the hope that it will be useful,
+' * but WITHOUT ANY WARRANTY; without even the implied warranty of
+' * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+' * GNU Lesser General Public License version 3 for more details
+' * (a copy is included in the LICENSE file that accompanied this code).
+' *
+' * You should have received a copy of the GNU Lesser General Public License
+' * version 3 along with OpenOffice.org. If not, see
+' * <http://www.openoffice.org/license.html>
+' * for a copy of the LGPLv3 License.
+' *
+' ************************************************************************/
+
+Option Explicit
+
+Public ppStrings As StringDataManager
+
+Public Sub Presentation_Open()
+ MsgBox GetResourceDataFileName
+ Set ppStrings = New StringDataManager
+
+ ppStrings.InitStringData (GetResourceDataFileName)
+ LoadCommonStrings ppStrings
+ LoadPPStrings ppStrings
+ Set ppStrings = Nothing
+
+ SetPPDriverText
+End Sub
+
+Sub SetPPDriverText()
+ On Error Resume Next
+ CAPP_DOCPROP_LOCATION = RID_STR_COMMON_RESULTS_LOCATION_TYPE_PRESENTATION
+ ActivePresentation.Slides.item(1).Shapes.item("RID_STR_DVR_PP_TXT2").OLEFormat.Object.Text = RID_STR_DVR_PP_TXT2
+ ActivePresentation.Slides.item(1).Shapes.item("RID_STR_DVR_PP_TXT3").OLEFormat.Object.Text = RID_STR_DVR_PP_TXT3
+ ActivePresentation.Slides.item(1).Shapes.item("RID_STR_DVR_PP_TXT4").OLEFormat.Object.Text = RID_STR_DVR_PP_TXT4
+ ActivePresentation.Slides.item(1).Shapes.item("RID_STR_DVR_PP_TXT5").OLEFormat.Object.Text = RID_STR_DVR_PP_TXT5
+ ActivePresentation.Slides.item(1).Shapes.item("RID_STR_DVR_PP_TXT6").OLEFormat.Object.Text = RID_STR_DVR_PP_TXT6
+ ActivePresentation.Slides.item(1).Shapes.item("RID_STR_DVR_PP_TXT7").OLEFormat.Object.Text = RID_STR_DVR_PP_TXT7
+ ActivePresentation.Slides.item(1).Shapes.item("RID_STR_DVR_PP_TXT8").OLEFormat.Object.Text = RID_STR_DVR_PP_TXT8
+End Sub
diff --git a/migrationanalysis/src/driver_docs/sources/powerpoint/powerpoint_res.bas b/migrationanalysis/src/driver_docs/sources/powerpoint/powerpoint_res.bas
new file mode 100644
index 000000000000..0aba1c6cf755
--- /dev/null
+++ b/migrationanalysis/src/driver_docs/sources/powerpoint/powerpoint_res.bas
@@ -0,0 +1,109 @@
+Attribute VB_Name = "powerpoint_res"
+'/*************************************************************************
+' *
+' * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+' *
+' * Copyright 2008 by Sun Microsystems, Inc.
+' *
+' * OpenOffice.org - a multi-platform office productivity suite
+' *
+' * $RCSfile: powerpoint_res.bas,v $
+' *
+' * This file is part of OpenOffice.org.
+' *
+' * OpenOffice.org is free software: you can redistribute it and/or modify
+' * it under the terms of the GNU Lesser General Public License version 3
+' * only, as published by the Free Software Foundation.
+' *
+' * OpenOffice.org is distributed in the hope that it will be useful,
+' * but WITHOUT ANY WARRANTY; without even the implied warranty of
+' * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+' * GNU Lesser General Public License version 3 for more details
+' * (a copy is included in the LICENSE file that accompanied this code).
+' *
+' * You should have received a copy of the GNU Lesser General Public License
+' * version 3 along with OpenOffice.org. If not, see
+' * <http://www.openoffice.org/license.html>
+' * for a copy of the LGPLv3 License.
+' *
+' ************************************************************************/
+
+Public RID_STR_PP_TRUE As String
+Public RID_STR_PP_FALSE As String
+Public RID_STR_PP_ISSUE_OBJECTS_GRAPHICS_AND_TEXTBOXES As String
+Public RID_STR_PP_SUBISSUE_COMMENT As String
+Public RID_STR_PP_SUBISSUE_MOVIE As String
+Public RID_STR_PP_SUBISSUE_BACKGROUND_NOTE As String
+Public RID_STR_PP_SUBISSUE_NUMBERING_NOTE As String
+Public RID_STR_PP_SUBISSUE_HYPERLINK_NOTE As String
+Public RID_STR_PP_SUBISSUE_HYPERLINK_SPLIT_NOTE As String
+Public RID_STR_PP_SUBISSUE_TEMPLATE As String
+Public RID_STR_PP_SUBISSUE_TEMPLATE_NOTE As String
+Public RID_STR_PP_SUBISSUE_TABSTOP_NOTE As String
+Public RID_STR_PP_SUBISSUE_FONTS As String
+Public RID_STR_PP_SUBISSUE_FONTS_NOTE As String
+Public RID_STR_PP_ATTRIBUTE_CONTENT As String
+Public RID_STR_PP_ATTRIBUTE_LOOP As String
+Public RID_STR_PP_ATTRIBUTE_PLAYONENTRY As String
+Public RID_STR_PP_ATTRIBUTE_REWIND As String
+Public RID_STR_PP_ATTRIBUTE_TYPES As String
+Public RID_STR_PP_ENUMERATION_VIEW_HANDOUT_MASTER As String
+Public RID_STR_PP_ENUMERATION_VIEW_NORMAL As String
+Public RID_STR_PP_ENUMERATION_VIEW_NOTES_MASTER As String
+Public RID_STR_PP_ENUMERATION_VIEW_NOTES_PAGE As String
+Public RID_STR_PP_ENUMERATION_VIEW_OUTLINE As String
+Public RID_STR_PP_ENUMERATION_VIEW_SLIDE As String
+Public RID_STR_PP_ENUMERATION_VIEW_SLIDE_MASTER As String
+Public RID_STR_PP_ENUMERATION_VIEW_SLIDE_SORTER As String
+Public RID_STR_PP_ENUMERATION_VIEW_TITLE_MASTER As String
+Public RID_STR_PP_ENUMERATION_UNKNOWN As String
+
+'Driver strings
+Public RID_STR_DVR_PP_TXT2 As String
+Public RID_STR_DVR_PP_TXT3 As String
+Public RID_STR_DVR_PP_TXT4 As String
+Public RID_STR_DVR_PP_TXT5 As String
+Public RID_STR_DVR_PP_TXT6 As String
+Public RID_STR_DVR_PP_TXT7 As String
+Public RID_STR_DVR_PP_TXT8 As String
+
+Public Sub LoadPPStrings(sdm As StringDataManager)
+ sdm.InitString RID_STR_PP_TRUE, "RID_STR_PP_TRUE"
+ sdm.InitString RID_STR_PP_FALSE, "RID_STR_PP_FALSE"
+ sdm.InitString RID_STR_PP_ISSUE_OBJECTS_GRAPHICS_AND_TEXTBOXES, "RID_STR_PP_ISSUE_OBJECTS_GRAPHICS_AND_TEXTBOXES"
+ sdm.InitString RID_STR_PP_SUBISSUE_COMMENT, "RID_STR_PP_SUBISSUE_COMMENT"
+ sdm.InitString RID_STR_PP_SUBISSUE_MOVIE, "RID_STR_PP_SUBISSUE_MOVIE"
+ sdm.InitString RID_STR_PP_SUBISSUE_BACKGROUND_NOTE, "RID_STR_PP_SUBISSUE_BACKGROUND_NOTE"
+ sdm.InitString RID_STR_PP_SUBISSUE_NUMBERING_NOTE, "RID_STR_PP_SUBISSUE_NUMBERING_NOTE"
+ sdm.InitString RID_STR_PP_SUBISSUE_HYPERLINK_NOTE, "RID_STR_PP_SUBISSUE_HYPERLINK_NOTE"
+ sdm.InitString RID_STR_PP_SUBISSUE_HYPERLINK_SPLIT_NOTE, "RID_STR_PP_SUBISSUE_HYPERLINK_SPLIT_NOTE"
+ sdm.InitString RID_STR_PP_SUBISSUE_TEMPLATE, "RID_STR_PP_SUBISSUE_TEMPLATE"
+ sdm.InitString RID_STR_PP_SUBISSUE_TEMPLATE_NOTE, "RID_STR_PP_SUBISSUE_TEMPLATE_NOTE"
+ sdm.InitString RID_STR_PP_SUBISSUE_TABSTOP_NOTE, "RID_STR_PP_SUBISSUE_TABSTOP_NOTE"
+ sdm.InitString RID_STR_PP_SUBISSUE_FONTS, "RID_STR_PP_SUBISSUE_FONTS"
+ sdm.InitString RID_STR_PP_SUBISSUE_FONTS_NOTE, "RID_STR_PP_SUBISSUE_FONTS_NOTE"
+ sdm.InitString RID_STR_PP_ATTRIBUTE_CONTENT, "RID_STR_PP_ATTRIBUTE_CONTENT"
+ sdm.InitString RID_STR_PP_ATTRIBUTE_LOOP, "RID_STR_PP_ATTRIBUTE_LOOP"
+ sdm.InitString RID_STR_PP_ATTRIBUTE_PLAYONENTRY, "RID_STR_PP_ATTRIBUTE_PLAYONENTRY"
+ sdm.InitString RID_STR_PP_ATTRIBUTE_REWIND, "RID_STR_PP_ATTRIBUTE_REWIND"
+ sdm.InitString RID_STR_PP_ATTRIBUTE_TYPES, "RID_STR_PP_ATTRIBUTE_TYPES"
+ sdm.InitString RID_STR_PP_ENUMERATION_VIEW_HANDOUT_MASTER, "RID_STR_PP_ENUMERATION_VIEW_HANDOUT_MASTER"
+ sdm.InitString RID_STR_PP_ENUMERATION_VIEW_NORMAL, "RID_STR_PP_ENUMERATION_VIEW_NORMAL"
+ sdm.InitString RID_STR_PP_ENUMERATION_VIEW_NOTES_MASTER, "RID_STR_PP_ENUMERATION_VIEW_NOTES_MASTER"
+ sdm.InitString RID_STR_PP_ENUMERATION_VIEW_NOTES_PAGE, "RID_STR_PP_ENUMERATION_VIEW_NOTES_PAGE"
+ sdm.InitString RID_STR_PP_ENUMERATION_VIEW_OUTLINE, "RID_STR_PP_ENUMERATION_VIEW_OUTLINE"
+ sdm.InitString RID_STR_PP_ENUMERATION_VIEW_SLIDE, "RID_STR_PP_ENUMERATION_VIEW_SLIDE"
+ sdm.InitString RID_STR_PP_ENUMERATION_VIEW_SLIDE_MASTER, "RID_STR_PP_ENUMERATION_VIEW_SLIDE_MASTER"
+ sdm.InitString RID_STR_PP_ENUMERATION_VIEW_SLIDE_SORTER, "RID_STR_PP_ENUMERATION_VIEW_SLIDE_SORTER"
+ sdm.InitString RID_STR_PP_ENUMERATION_VIEW_TITLE_MASTER, "RID_STR_PP_ENUMERATION_VIEW_TITLE_MASTER"
+ sdm.InitString RID_STR_PP_ENUMERATION_UNKNOWN, "RID_STR_PP_ENUMERATION_UNKNOWN"
+
+ 'Driver strings
+ sdm.InitString RID_STR_DVR_PP_TXT2, "RID_STR_DVR_PP_TXT2"
+ sdm.InitString RID_STR_DVR_PP_TXT3, "RID_STR_DVR_PP_TXT3"
+ sdm.InitString RID_STR_DVR_PP_TXT4, "RID_STR_DVR_PP_TXT4"
+ sdm.InitString RID_STR_DVR_PP_TXT5, "RID_STR_DVR_PP_TXT5"
+ sdm.InitString RID_STR_DVR_PP_TXT6, "RID_STR_DVR_PP_TXT6"
+ sdm.InitString RID_STR_DVR_PP_TXT7, "RID_STR_DVR_PP_TXT7"
+ sdm.InitString RID_STR_DVR_PP_TXT8, "RID_STR_DVR_PP_TXT8"
+End Sub
diff --git a/migrationanalysis/src/driver_docs/sources/results_res.bas b/migrationanalysis/src/driver_docs/sources/results_res.bas
new file mode 100644
index 000000000000..b8285ff369e8
--- /dev/null
+++ b/migrationanalysis/src/driver_docs/sources/results_res.bas
@@ -0,0 +1,613 @@
+Attribute VB_Name = "results_res"
+Public RID_RESXLS_COST_Action_Settings As String
+Public RID_RESXLS_COST_Add_custom_properties_to_document_Properties_Summary_Comments_field As String
+Public RID_RESXLS_COST_Additional_Weighting_Factors As String
+Public RID_RESXLS_COST_All_sheets__256_will_need_to_be_moved_to_a_new_workbook As String
+Public RID_RESXLS_COST_Appearance As String
+Public RID_RESXLS_COST_Application As String
+Public RID_RESXLS_COST_Border_Styles As String
+Public RID_RESXLS_COST_Cell_Attributes As String
+Public RID_RESXLS_COST_CELL_SPAN_WORKAROUND As String
+Public RID_RESXLS_COST_Cell_Spanning_Page As String
+Public RID_RESXLS_COST_ChangesAndReviewing As String
+Public RID_RESXLS_COST_Charts_And_Tables As String
+Public RID_RESXLS_COST_Comment As String
+Public RID_RESXLS_COST_Content_And_Document_Properties As String
+Public RID_RESXLS_COST_ContentAndDocumentProperties As String
+Public RID_RESXLS_COST_Controls As String
+Public RID_RESXLS_COST_Cost As String
+Public RID_RESXLS_COST_Cost__In_simple_cases_cut_and_paste_to_new_sheet_3___5_min As String
+Public RID_RESXLS_COST_COST_0 As String
+Public RID_RESXLS_COST_COST_EMBED_CHART As String
+Public RID_RESXLS_COST_COST_ERROR_TYPE As String
+Public RID_RESXLS_COST_COST_INFO As String
+Public RID_RESXLS_COST_COST_INVAL_PASS As String
+Public RID_RESXLS_COST_COST_INVALID_WORKSHEET_NAME As String
+Public RID_RESXLS_COST_Cost_of_4_min_per_line__takes_no_account_of_complexity_of_code__number_of_comment_lines_and_so_on As String
+Public RID_RESXLS_COST_Cost_per_Issue_or_Factor__min As String
+Public RID_RESXLS_COST_COST_PIVOT As String
+Public RID_RESXLS_COST_COST_SHEET_CHART As String
+Public RID_RESXLS_COST_Cost_variations_occur_because_of_the_use_of_macros_with_controls As String
+Public RID_RESXLS_COST_COST_VBA_CONT_TYPE As String
+Public RID_RESXLS_COST_COST_VBA_CONTROLS As String
+Public RID_RESXLS_COST_COST_VBA_FORMS As String
+Public RID_RESXLS_COST_COST_VBA_LOC As String
+Public RID_RESXLS_COST_COST_VBA_PROPS As String
+Public RID_RESXLS_COST_Costs__min As String
+Public RID_RESXLS_COST_Custom_Bullet_List As String
+Public RID_RESXLS_COST_Document_Custom_Properties As String
+Public RID_RESXLS_COST_Document_Parts_Protection As String
+Public RID_RESXLS_COST_Embedded_Chart As String
+Public RID_RESXLS_COST_embedded_objects As String
+Public RID_RESXLS_COST_Embedded_OLE_Object As String
+Public RID_RESXLS_COST_Excel As String
+Public RID_RESXLS_COST_Excel_Totals As String
+Public RID_RESXLS_COST_External As String
+Public RID_RESXLS_COST_External_References_In_Macro___Module__Class_or_UserForm As String
+Public RID_RESXLS_COST_Factor_Count As String
+Public RID_RESXLS_COST_Fields As String
+Public RID_RESXLS_COST_Filters As String
+Public RID_RESXLS_COST_Fixed_SO7 As String
+Public RID_RESXLS_COST_Form_Field As String
+Public RID_RESXLS_COST_Format As String
+Public RID_RESXLS_COST_Functions As String
+Public RID_RESXLS_COST_HEADERFOOTER_WORKAROUND As String
+Public RID_RESXLS_COST_Hours_Per_MD As String
+Public RID_RESXLS_COST_Indexes_And_References As String
+Public RID_RESXLS_COST_Invalid_Password_Entered As String
+Public RID_RESXLS_COST_Invalid_Worksheet_Name As String
+Public RID_RESXLS_COST_Issue__18_of_the_24_table_border_styles_do_not_display_correctly As String
+Public RID_RESXLS_COST_Issue__256_sheet_limit_exceeded As String
+Public RID_RESXLS_COST_Issue__32000_row_limit_exceeded As String
+Public RID_RESXLS_COST_Issue__A_worksheet_in_the_workbook_has_a_name_with_invalid_characters As String
+Public RID_RESXLS_COST_Issue__Calls_to_windows_API_functions_are_windows_specific As String
+Public RID_RESXLS_COST_Issue__Chart_support_is_limited_in_SO7 As String
+Public RID_RESXLS_COST_Issue__Comments_are_lost_on_migration_to_SO7 As String
+Public RID_RESXLS_COST_Issue__Custom_Properties_are_lost_on_migration As String
+Public RID_RESXLS_COST_Issue__Document_is_password_protected_and_cannot_be_opened_by_SO As String
+Public RID_RESXLS_COST_Issue__External_functions_not_supported_by_SO7 As String
+Public RID_RESXLS_COST_Issue__External_references_are_windows_specific As String
+Public RID_RESXLS_COST_Issue__Fields_are_imported_but_need_to_have_the_link_to_datasource_reset As String
+Public RID_RESXLS_COST_Issue__Graphics___frames_in_header_footer_tend_to_be_misplaced As String
+Public RID_RESXLS_COST_Issue__Incorrect_password_entered As String
+Public RID_RESXLS_COST_Issue__Information_relating_to_the_data_source_is_lost_in_migration As String
+Public RID_RESXLS_COST_Issue__Invalid_password_entered_Rerun_analysis As String
+Public RID_RESXLS_COST_Issue__Lost_during_migration_No_StarOffice_equivalent As String
+Public RID_RESXLS_COST_Issue__Macros_from_old_workbook_versions_do_not_import_into_SO7 As String
+Public RID_RESXLS_COST_Issue__Modules_will_need_porting_to_StarOffice_Basic As String
+Public RID_RESXLS_COST_Issue__Most_migrate_ok_but_do_not_roundtrip As String
+Public RID_RESXLS_COST_Issue__Movies_are_not_supported_by_SO7 As String
+Public RID_RESXLS_COST_Issue__Need_to_set_these_to_be_included_in_TOC_in_SO7 As String
+Public RID_RESXLS_COST_Issue__Password_protection_of_comments__tracked_changes_and_forms_is_lost As String
+Public RID_RESXLS_COST_Issue__Pivot_charts_are_not_supported_by_SO7 As String
+Public RID_RESXLS_COST_Issue__Presents_a_cross_platform_interoperability_issue As String
+Public RID_RESXLS_COST_Issue__Print_wide_pages_not_supported As String
+Public RID_RESXLS_COST_Issue__Shading_can_be_applied_to_fields_and_to_controls_separately_in_Word As String
+Public RID_RESXLS_COST_Issue__Table_imported_as_text_as_no_StarOffice_equivalent As String
+Public RID_RESXLS_COST_Issue__Tables_nested_in_tables_are_not_supported_by_SO7 As String
+Public RID_RESXLS_COST_Issue__Tabs_are_incorrect_after_migration As String
+Public RID_RESXLS_COST_Issue__Text_form_fields_roundtrip_as_Fill_In_field As String
+Public RID_RESXLS_COST_Issue__Unsupported_formatting_set As String
+Public RID_RESXLS_COST_Issue__Unsupported_function_type As String
+Public RID_RESXLS_COST_Issue__Userform_controls_will_need_porting_to_StarOffice_Basic As String
+Public RID_RESXLS_COST_Issue__Userforms_controls_will_need_porting_to_StarOffice_Basic As String
+Public RID_RESXLS_COST_Issue__Userforms_will_need_porting_to_StarOffice_Basic As String
+Public RID_RESXLS_COST_Issue__VBProject_is_password_protected_Remove_password__rerun_analysis As String
+Public RID_RESXLS_COST_Issue__Will_need_refreshing_in_SO7_External_datasources_and_functions_are_not_supported As String
+Public RID_RESXLS_COST_Issue__Workbook_protection_is_not_supported As String
+Public RID_RESXLS_COST_Issue__Writer_cannot_correctly_display_cells_spanning_more_than_1_page As String
+Public RID_RESXLS_COST_Issue_Category As String
+Public RID_RESXLS_COST_Issue_Count As String
+Public RID_RESXLS_COST_Issue_Type As String
+Public RID_RESXLS_COST_Linked_OLE_Object As String
+Public RID_RESXLS_COST_Mail_Merge_Datasource As String
+Public RID_RESXLS_COST_Mail_Merge_Field As String
+Public RID_RESXLS_COST_Major_Issue As String
+Public RID_RESXLS_COST_MAX_SHEETS_WORKAROUND As String
+Public RID_RESXLS_COST_Maximum_Rows_Exceeded As String
+Public RID_RESXLS_COST_Maximum_Sheets_Exceeded As String
+Public RID_RESXLS_COST_Migration_Issues_Costs As String
+Public RID_RESXLS_COST_Movie As String
+Public RID_RESXLS_COST_NESTED_TABLE_WORKAROUND As String
+Public RID_RESXLS_COST_Nested_Tables As String
+Public RID_RESXLS_COST_Not_Planned As String
+Public RID_RESXLS_COST_Notes_And_Handouts As String
+Public RID_RESXLS_COST_Number_Of_External_References As String
+Public RID_RESXLS_COST_Number_Of_Lines As String
+Public RID_RESXLS_COST_Number_of_Lines_in_Unique_Modules As String
+Public RID_RESXLS_COST_Number_of_Modules As String
+Public RID_RESXLS_COST_Number_of_Unique_Modules As String
+Public RID_RESXLS_COST_Numbering_Reference As String
+Public RID_RESXLS_COST_Numbering_Reference_Comment As String
+Public RID_RESXLS_COST_Object_In_Header_Footer As String
+Public RID_RESXLS_COST_Objects_And_Graphics As String
+Public RID_RESXLS_COST_Objects_Graphics_And_Frames As String
+Public RID_RESXLS_COST_Objects_Graphics_And_Textboxes As String
+Public RID_RESXLS_COST_Old_Workbook_Version As String
+Public RID_RESXLS_COST_OLE_Control As String
+Public RID_RESXLS_COST_OLECONTR_COST As String
+Public RID_RESXLS_COST_Page_Setup As String
+Public RID_RESXLS_COST_Password_Protected As String
+Public RID_RESXLS_COST_Password_Protection As String
+Public RID_RESXLS_COST_Pivot As String
+Public RID_RESXLS_COST_Planned_SO8 As String
+Public RID_RESXLS_COST_Portability As String
+Public RID_RESXLS_COST_PowerPoint As String
+Public RID_RESXLS_COST_PowerPoint_Totals As String
+Public RID_RESXLS_COST_Prepared_Issue_Count As String
+Public RID_RESXLS_COST_Prepared_Savings__min As String
+Public RID_RESXLS_COST_Properties___Module__Class_or_UserForm As String
+Public RID_RESXLS_COST_Remove_password_to_open As String
+Public RID_RESXLS_COST_Remove_the_invalid_characters_from_the_worksheet_name As String
+Public RID_RESXLS_COST_Rerun_analysis_with_correct_password As String
+Public RID_RESXLS_COST_Reset_link_to_Data_Base_having_setup_a_Datasource_in_SO7 As String
+Public RID_RESXLS_COST_set_cost_factor_if_the_macro_has_to_be_ported_off_Windows As String
+Public RID_RESXLS_COST_Save_workbook_as_a_new_workbook_version As String
+Public RID_RESXLS_COST_Setup_Datasource_in_SO7_using_Tools__Datasource As String
+Public RID_RESXLS_COST_Sheet_Chart As String
+Public RID_RESXLS_COST_Status As String
+Public RID_RESXLS_COST_Table_Of_Authorities As String
+Public RID_RESXLS_COST_Table_Of_Authorities_Field As String
+Public RID_RESXLS_COST_Table_Of_Contents As String
+Public RID_RESXLS_COST_Tables As String
+Public RID_RESXLS_COST_TOC_ISSUE_WORKAROUND As String
+Public RID_RESXLS_COST_Total_Cost___MD As String
+Public RID_RESXLS_COST_User_Error As String
+Public RID_RESXLS_COST_User_Forms_Control_Count As String
+Public RID_RESXLS_COST_User_Forms_Control_Type_Count As String
+Public RID_RESXLS_COST_User_Forms_Count As String
+Public RID_RESXLS_COST_VBA_Macros As String
+Public RID_RESXLS_COST_Word As String
+Public RID_RESXLS_COST_Word_Totals As String
+Public RID_RESXLS_COST_Work_Around As String
+Public RID_RESXLS_COST_Workaround_Remove_protection_before_importing As String
+Public RID_RESXLS_COST_WorkbookProtection As String
+Public RID_RESXLS_DP_Accessed As String
+Public RID_RESXLS_DP_All_Analysed_Documents___Properties As String
+Public RID_RESXLS_DP_Application As String
+Public RID_RESXLS_DP_Based_on_Template As String
+Public RID_RESXLS_DP_Costs As String
+Public RID_RESXLS_DP_Created As String
+Public RID_RESXLS_DP_Document_Details As String
+Public RID_RESXLS_DP_Document_Issue_Costs As String
+Public RID_RESXLS_DP_Document_Migration_Issues As String
+Public RID_RESXLS_DP_Document_Name As String
+Public RID_RESXLS_DP_Document_Name_and_Path As String
+Public RID_RESXLS_DP_Issues_Complex_count As String
+Public RID_RESXLS_DP_Last_Saved_By As String
+Public RID_RESXLS_DP_Lines_of_Macro_Code As String
+Public RID_RESXLS_DP_Macro_Issues As String
+Public RID_RESXLS_DP_Macro_Migration_Costs As String
+Public RID_RESXLS_DP_Macro_Migration_Issues As String
+Public RID_RESXLS_DP_Migration_Issues As String
+Public RID_RESXLS_DP_Minor_Issues As String
+Public RID_RESXLS_DP_Modified As String
+Public RID_RESXLS_DP_Pages_Sheets_Slides As String
+Public RID_RESXLS_DP_Prepareable_Issues_Costs As String
+Public RID_RESXLS_DP_Prepared_Issues As String
+Public RID_RESXLS_DP_Printed As String
+Public RID_RESXLS_DP_Revision As String
+Public RID_RESXLS_DP_User_Form_Count As String
+Public RID_RESXLS_ID_All_Documents_with_Issues___Issue_Details As String
+Public RID_RESXLS_ID_Application As String
+Public RID_RESXLS_ID_Column__Left As String
+Public RID_RESXLS_ID_Document_Name As String
+Public RID_RESXLS_ID_Document_Name_and_Path As String
+Public RID_RESXLS_ID_Issue_Category As String
+Public RID_RESXLS_ID_Issue_Details As String
+Public RID_RESXLS_ID_Issue_Type As String
+Public RID_RESXLS_ID_Line__Row__Top As String
+Public RID_RESXLS_ID_Location As String
+Public RID_RESXLS_ID_Location_Type As String
+Public RID_RESXLS_OV_3_to_6_months As String
+Public RID_RESXLS_OV_6_to_12_months As String
+Public RID_RESXLS_OV_Complex As String
+Public RID_RESXLS_OV_Cost_estimates_for_migration As String
+Public RID_RESXLS_OV_Costs As String
+Public RID_RESXLS_OV_Docs_with_DocumentMigrationIssues As String
+Public RID_RESXLS_OV_Document_Migration_Costs As String
+Public RID_RESXLS_OV_Document_Modification_Dates As String
+Public RID_RESXLS_OV_Document_Type As String
+Public RID_RESXLS_OV_Documents_with_Macro_Migration_Issues As String
+Public RID_RESXLS_OV_Excel As String
+Public RID_RESXLS_OV_Excel_Costs As String
+Public RID_RESXLS_OV_Excel_Spreadsheet As String
+Public RID_RESXLS_OV_Excel_Template As String
+Public RID_RESXLS_OV_GREATER_THAN_1_year As String
+Public RID_RESXLS_OV_Last_Modified As String
+Public RID_RESXLS_OV_LESS_3_months As String
+Public RID_RESXLS_OV_LESS_THAN3MONTHS As String
+Public RID_RESXLS_OV_Macro_Migration_Costs As String
+Public RID_RESXLS_OV_Medium As String
+Public RID_RESXLS_OV_Minor As String
+Public RID_RESXLS_OV_None As String
+Public RID_RESXLS_OV_Number As String
+Public RID_RESXLS_OV_Number_of_Documents_Analyzed As String
+Public RID_RESXLS_OV_NumberOfDocs As String
+Public RID_RESXLS_OV_Potential_savings_macro_conversion As String
+Public RID_RESXLS_OV_Potential_savings_prepared_docs As String
+Public RID_RESXLS_OV_PowerPoint As String
+Public RID_RESXLS_OV_PowerPoint_Costs As String
+Public RID_RESXLS_OV_PowerPoint_Document As String
+Public RID_RESXLS_OV_PowerPoint_Template As String
+Public RID_RESXLS_OV_Simple As String
+Public RID_RESXLS_OV_Total As String
+Public RID_RESXLS_OV_Totals As String
+Public RID_RESXLS_OV_Word As String
+Public RID_RESXLS_OV_Word_Costs As String
+Public RID_RESXLS_OV_Word_Document As String
+Public RID_RESXLS_OV_Word_Template As String
+Public RID_RESXLS_PP_Action_Settings As String
+Public RID_RESXLS_PP_Application As String
+Public RID_RESXLS_PP_Content___Document_Properties As String
+Public RID_RESXLS_PP_Document_Name_and_Path As String
+Public RID_RESXLS_PP_Fields As String
+Public RID_RESXLS_PP_Format As String
+Public RID_RESXLS_PP_Notes___Handouts As String
+Public RID_RESXLS_PP_Objects__Graphics___Textboxes As String
+Public RID_RESXLS_PP_Portability As String
+Public RID_RESXLS_PP_PowerPoint_Documents_with_Issues___Issue_Summary As String
+Public RID_RESXLS_PP_PowerPoint_Presentation_Name As String
+Public RID_RESXLS_PP_VBA_Macros As String
+Public RID_RESXLS_RD_All_Documents_with_Macros___Reference_Details As String
+Public RID_RESXLS_RD_Application As String
+Public RID_RESXLS_RD_Description As String
+Public RID_RESXLS_RD_Document_Name As String
+Public RID_RESXLS_RD_Document_Name_and_Path As String
+Public RID_RESXLS_RD_Location As String
+Public RID_RESXLS_RD_Reference As String
+Public RID_RESXLS_RD_Reference_Details As String
+Public RID_RESXLS_WI_Application As String
+Public RID_RESXLS_WI_Changes_and_Reviewing As String
+Public RID_RESXLS_WI_Content___Document_Properties As String
+Public RID_RESXLS_WI_Controls As String
+Public RID_RESXLS_WI_Document_Name_and_Path As String
+Public RID_RESXLS_WI_Fields As String
+Public RID_RESXLS_WI_Format As String
+Public RID_RESXLS_WI_Index_and_References As String
+Public RID_RESXLS_WI_Objects__Graphics____Frames As String
+Public RID_RESXLS_WI_Portability As String
+Public RID_RESXLS_WI_Tables As String
+Public RID_RESXLS_WI_VBA_Macros As String
+Public RID_RESXLS_WI_Word_Document_Name As String
+Public RID_RESXLS_WI_Word_Documents_with_Issues___Issue_Summary As String
+Public RID_RESXLS_XL_Application As String
+Public RID_RESXLS_XL_Changes___Reviewing As String
+Public RID_RESXLS_XL_Charts___Tables As String
+Public RID_RESXLS_XL_Excel_Documents_with_Issues___Issue_Summary As String
+Public RID_RESXLS_XL_Excel_Spreadsheet_Name As String
+Public RID_RESXLS_XL_Format As String
+Public RID_RESXLS_XL_Functions As String
+Public RID_RESXLS_XL_Objects___Graphics As String
+
+Public RID_RESXLS_COST_DB_Query As String
+Public RID_RESXLS_COST_DB_Query_Comment As String
+Public RID_RESXLS_COST_LineStyle As String
+Public RID_RESXLS_COST_LineStyle_Comment As String
+Public RID_RESXLS_COST_Numbering As String
+Public RID_RESXLS_COST_Numbering_Comment As String
+Public RID_RESXLS_COST_Template As String
+Public RID_RESXLS_COST_Template_Comment As String
+Public RID_RESXLS_COST_DATEDIF_Note As String
+Public RID_RESXLS_COST_Tabstop As String
+Public RID_RESXLS_COST_Tabstop_Comment As String
+Public RID_RESXLS_COST_Transparent As String
+Public RID_RESXLS_COST_Transparent_Comment As String
+Public RID_RESXLS_COST_GradientStyle As String
+Public RID_RESXLS_COST_GradientStyle_Comment As String
+Public RID_RESXLS_COST_GradientStyle_Note As String
+Public RID_RESXLS_COST_Hyperlink As String
+Public RID_RESXLS_COST_Hyperlink_Comment As String
+Public RID_RESXLS_COST_HyperlinkSplit As String
+Public RID_RESXLS_COST_HyperlinkSplit_Comment As String
+Public RID_RESXLS_COST_Background As String
+Public RID_RESXLS_COST_Background_Comment As String
+
+Public Sub LoadResultsStrings(sdm As StringDataManager)
+ On Error Resume Next
+
+ sdm.InitString RID_RESXLS_COST_Action_Settings, "RID_RESXLS_COST_Action_Settings"
+ sdm.InitString RID_RESXLS_COST_Add_custom_properties_to_document_Properties_Summary_Comments_field, "RID_RESXLS_COST_Add_custom_properties_to_document_Properties_Summary_Comments_field"
+ sdm.InitString RID_RESXLS_COST_Additional_Weighting_Factors, "RID_RESXLS_COST_Additional_Weighting_Factors"
+ sdm.InitString RID_RESXLS_COST_All_sheets__256_will_need_to_be_moved_to_a_new_workbook, "RID_RESXLS_COST_All_sheets__256_will_need_to_be_moved_to_a_new_workbook"
+ sdm.InitString RID_RESXLS_COST_Appearance, "RID_RESXLS_COST_Appearance"
+ sdm.InitString RID_RESXLS_COST_Application, "RID_RESXLS_COST_Application"
+ sdm.InitString RID_RESXLS_COST_Border_Styles, "RID_RESXLS_COST_Border_Styles"
+ sdm.InitString RID_RESXLS_COST_Cell_Attributes, "RID_RESXLS_COST_Cell_Attributes"
+ sdm.InitString RID_RESXLS_COST_CELL_SPAN_WORKAROUND, "RID_RESXLS_COST_CELL_SPAN_WORKAROUND"
+ sdm.InitString RID_RESXLS_COST_Cell_Spanning_Page, "RID_RESXLS_COST_Cell_Spanning_Page"
+ sdm.InitString RID_RESXLS_COST_ChangesAndReviewing, "RID_RESXLS_COST_ChangesAndReviewing"
+ sdm.InitString RID_RESXLS_COST_Charts_And_Tables, "RID_RESXLS_COST_Charts_And_Tables"
+ sdm.InitString RID_RESXLS_COST_Comment, "RID_STR_WORD_SUBISSUE_COMMENT"
+ sdm.InitString RID_RESXLS_COST_Content_And_Document_Properties, "RID_RESXLS_COST_Content_And_Document_Properties"
+ sdm.InitString RID_RESXLS_COST_ContentAndDocumentProperties, "RID_RESXLS_COST_ContentAndDocumentProperties"
+ sdm.InitString RID_RESXLS_COST_Controls, "RID_RESXLS_COST_Controls"
+ sdm.InitString RID_RESXLS_COST_Cost, "RID_RESXLS_COST_Cost"
+ sdm.InitString RID_RESXLS_COST_Cost__In_simple_cases_cut_and_paste_to_new_sheet_3___5_min, "RID_RESXLS_COST_Cost__In_simple_cases_cut_and_paste_to_new_sheet_3___5_min"
+ sdm.InitString RID_RESXLS_COST_COST_0, "RID_RESXLS_COST_COST_0"
+ sdm.InitString RID_RESXLS_COST_COST_EMBED_CHART, "RID_RESXLS_COST_COST_EMBED_CHART"
+ sdm.InitString RID_RESXLS_COST_COST_ERROR_TYPE, "RID_RESXLS_COST_COST_ERROR_TYPE"
+ sdm.InitString RID_RESXLS_COST_COST_INFO, "RID_RESXLS_COST_COST_INFO"
+ sdm.InitString RID_RESXLS_COST_COST_INVAL_PASS, "RID_RESXLS_COST_COST_INVAL_PASS"
+ sdm.InitString RID_RESXLS_COST_COST_INVALID_WORKSHEET_NAME, "RID_RESXLS_COST_COST_INVALID_WORKSHEET_NAME"
+ sdm.InitString RID_RESXLS_COST_Cost_of_4_min_per_line__takes_no_account_of_complexity_of_code__number_of_comment_lines_and_so_on, "RID_RESXLS_COST_Cost_of_4_min_per_line__takes_no_account_of_complexity_of_code__number_of_comment_lines_and_so_on"
+ sdm.InitString RID_RESXLS_COST_Cost_per_Issue_or_Factor__min, "RID_RESXLS_COST_Cost_per_Issue_or_Factor__min"
+ sdm.InitString RID_RESXLS_COST_COST_PIVOT, "RID_RESXLS_COST_COST_PIVOT"
+ sdm.InitString RID_RESXLS_COST_COST_SHEET_CHART, "RID_RESXLS_COST_COST_SHEET_CHART"
+ sdm.InitString RID_RESXLS_COST_Cost_variations_occur_because_of_the_use_of_macros_with_controls, "RID_RESXLS_COST_Cost_variations_occur_because_of_the_use_of_macros_with_controls"
+ sdm.InitString RID_RESXLS_COST_COST_VBA_CONT_TYPE, "RID_RESXLS_COST_COST_VBA_CONT_TYPE"
+ sdm.InitString RID_RESXLS_COST_COST_VBA_CONTROLS, "RID_RESXLS_COST_COST_VBA_CONTROLS"
+ sdm.InitString RID_RESXLS_COST_COST_VBA_FORMS, "RID_RESXLS_COST_COST_VBA_FORMS"
+ sdm.InitString RID_RESXLS_COST_COST_VBA_LOC, "RID_RESXLS_COST_COST_VBA_LOC"
+ sdm.InitString RID_RESXLS_COST_COST_VBA_PROPS, "RID_RESXLS_COST_COST_VBA_PROPS"
+ sdm.InitString RID_RESXLS_COST_Costs__min, "RID_RESXLS_COST_Costs__min"
+ sdm.InitString RID_RESXLS_COST_Custom_Bullet_List, "RID_RESXLS_COST_Custom_Bullet_List"
+ sdm.InitString RID_RESXLS_COST_Document_Custom_Properties, "RID_RESXLS_COST_Document_Custom_Properties"
+ sdm.InitString RID_RESXLS_COST_Document_Parts_Protection, "RID_RESXLS_COST_Document_Parts_Protection"
+ sdm.InitString RID_RESXLS_COST_Embedded_Chart, "RID_RESXLS_COST_Embedded_Chart"
+ sdm.InitString RID_RESXLS_COST_embedded_objects, "RID_RESXLS_COST_embedded_objects"
+ sdm.InitString RID_RESXLS_COST_Embedded_OLE_Object, "RID_RESXLS_COST_Embedded_OLE_Object"
+ sdm.InitString RID_RESXLS_COST_Excel, "RID_RESXLS_COST_Excel"
+ sdm.InitString RID_RESXLS_COST_Excel_Totals, "RID_RESXLS_COST_Excel_Totals"
+ sdm.InitString RID_RESXLS_COST_External, "RID_RESXLS_COST_External"
+ sdm.InitString RID_RESXLS_COST_External_References_In_Macro___Module__Class_or_UserForm, "RID_RESXLS_COST_External_References_In_Macro___Module__Class_or_UserForm"
+ sdm.InitString RID_RESXLS_COST_Factor_Count, "RID_RESXLS_COST_Factor_Count"
+ sdm.InitString RID_RESXLS_COST_Fields, "RID_RESXLS_COST_Fields"
+ sdm.InitString RID_RESXLS_COST_Filters, "RID_RESXLS_COST_Filters"
+ sdm.InitString RID_RESXLS_COST_Fixed_SO7, "RID_RESXLS_COST_Fixed_SO7"
+ sdm.InitString RID_RESXLS_COST_Form_Field, "RID_RESXLS_COST_Form_Field"
+ sdm.InitString RID_RESXLS_COST_Format, "RID_RESXLS_COST_Format"
+ sdm.InitString RID_RESXLS_COST_Functions, "RID_RESXLS_COST_Functions"
+ sdm.InitString RID_RESXLS_COST_HEADERFOOTER_WORKAROUND, "RID_RESXLS_COST_HEADERFOOTER_WORKAROUND"
+ sdm.InitString RID_RESXLS_COST_Hours_Per_MD, "RID_RESXLS_COST_Hours_Per_MD"
+ sdm.InitString RID_RESXLS_COST_Indexes_And_References, "RID_RESXLS_COST_Indexes_And_References"
+ sdm.InitString RID_RESXLS_COST_Invalid_Password_Entered, "RID_RESXLS_COST_Invalid_Password_Entered"
+ sdm.InitString RID_RESXLS_COST_Invalid_Worksheet_Name, "RID_RESXLS_COST_Invalid_Worksheet_Name"
+ sdm.InitString RID_RESXLS_COST_Issue__18_of_the_24_table_border_styles_do_not_display_correctly, "RID_RESXLS_COST_Issue__18_of_the_24_table_border_styles_do_not_display_correctly"
+ sdm.InitString RID_RESXLS_COST_Issue__256_sheet_limit_exceeded, "RID_RESXLS_COST_Issue__256_sheet_limit_exceeded"
+ sdm.InitString RID_RESXLS_COST_Issue__32000_row_limit_exceeded, "RID_RESXLS_COST_Issue__32000_row_limit_exceeded"
+ sdm.InitString RID_RESXLS_COST_Issue__A_worksheet_in_the_workbook_has_a_name_with_invalid_characters, "RID_RESXLS_COST_Issue__A_worksheet_in_the_workbook_has_a_name_with_invalid_characters"
+ sdm.InitString RID_RESXLS_COST_Issue__Calls_to_windows_API_functions_are_windows_specific, "RID_RESXLS_COST_Issue__Calls_to_windows_API_functions_are_windows_specific"
+ sdm.InitString RID_RESXLS_COST_Issue__Chart_support_is_limited_in_SO7, "RID_RESXLS_COST_Issue__Chart_support_is_limited_in_SO7"
+ sdm.InitString RID_RESXLS_COST_Issue__Comments_are_lost_on_migration_to_SO7, "RID_RESXLS_COST_Issue__Comments_are_lost_on_migration_to_SO7"
+ sdm.InitString RID_RESXLS_COST_Issue__Custom_Properties_are_lost_on_migration, "RID_RESXLS_COST_Issue__Custom_Properties_are_lost_on_migration"
+ sdm.InitString RID_RESXLS_COST_Issue__Document_is_password_protected_and_cannot_be_opened_by_SO, "RID_RESXLS_COST_Issue__Document_is_password_protected_and_cannot_be_opened_by_SO"
+ sdm.InitString RID_RESXLS_COST_Issue__External_functions_not_supported_by_SO7, "RID_RESXLS_COST_Issue__External_functions_not_supported_by_SO7"
+ sdm.InitString RID_RESXLS_COST_Issue__External_references_are_windows_specific, "RID_RESXLS_COST_Issue__External_references_are_windows_specific"
+ sdm.InitString RID_RESXLS_COST_Issue__Fields_are_imported_but_need_to_have_the_link_to_datasource_reset, "RID_RESXLS_COST_Issue__Fields_are_imported_but_need_to_have_the_link_to_datasource_reset"
+ sdm.InitString RID_RESXLS_COST_Issue__Graphics___frames_in_header_footer_tend_to_be_misplaced, "RID_RESXLS_COST_Issue__Graphics___frames_in_header_footer_tend_to_be_misplaced"
+ sdm.InitString RID_RESXLS_COST_Issue__Incorrect_password_entered, "RID_RESXLS_COST_Issue__Incorrect_password_entered"
+ sdm.InitString RID_RESXLS_COST_Issue__Information_relating_to_the_data_source_is_lost_in_migration, "RID_RESXLS_COST_Issue__Information_relating_to_the_data_source_is_lost_in_migration"
+ sdm.InitString RID_RESXLS_COST_Issue__Invalid_password_entered_Rerun_analysis, "RID_RESXLS_COST_Issue__Invalid_password_entered_Rerun_analysis"
+ sdm.InitString RID_RESXLS_COST_Issue__Lost_during_migration_No_StarOffice_equivalent, "RID_RESXLS_COST_Issue__Lost_during_migration_No_StarOffice_equivalent"
+ sdm.InitString RID_RESXLS_COST_Issue__Macros_from_old_workbook_versions_do_not_import_into_SO7, "RID_RESXLS_COST_Issue__Macros_from_old_workbook_versions_do_not_import_into_SO7"
+ sdm.InitString RID_RESXLS_COST_Issue__Modules_will_need_porting_to_StarOffice_Basic, "RID_RESXLS_COST_Issue__Modules_will_need_porting_to_StarOffice_Basic"
+ sdm.InitString RID_RESXLS_COST_Issue__Most_migrate_ok_but_do_not_roundtrip, "RID_RESXLS_COST_Issue__Most_migrate_ok_but_do_not_roundtrip"
+ sdm.InitString RID_RESXLS_COST_Issue__Movies_are_not_supported_by_SO7, "RID_RESXLS_COST_Issue__Movies_are_not_supported_by_SO7"
+ sdm.InitString RID_RESXLS_COST_Issue__Need_to_set_these_to_be_included_in_TOC_in_SO7, "RID_RESXLS_COST_Issue__Need_to_set_these_to_be_included_in_TOC_in_SO7"
+ sdm.InitString RID_RESXLS_COST_Issue__Password_protection_of_comments__tracked_changes_and_forms_is_lost, "RID_RESXLS_COST_Issue__Password_protection_of_comments__tracked_changes_and_forms_is_lost"
+ sdm.InitString RID_RESXLS_COST_Issue__Pivot_charts_are_not_supported_by_SO7, "RID_RESXLS_COST_Issue__Pivot_charts_are_not_supported_by_SO7"
+ sdm.InitString RID_RESXLS_COST_Issue__Presents_a_cross_platform_interoperability_issue, "RID_RESXLS_COST_Issue__Presents_a_cross_platform_interoperability_issue"
+ sdm.InitString RID_RESXLS_COST_Issue__Print_wide_pages_not_supported, "RID_RESXLS_COST_Issue__Print_wide_pages_not_supported"
+ sdm.InitString RID_RESXLS_COST_Issue__Shading_can_be_applied_to_fields_and_to_controls_separately_in_Word, "RID_RESXLS_COST_Issue__Shading_can_be_applied_to_fields_and_to_controls_separately_in_Word"
+ sdm.InitString RID_RESXLS_COST_Issue__Table_imported_as_text_as_no_StarOffice_equivalent, "RID_RESXLS_COST_Issue__Table_imported_as_text_as_no_StarOffice_equivalent"
+ sdm.InitString RID_RESXLS_COST_Issue__Tables_nested_in_tables_are_not_supported_by_SO7, "RID_RESXLS_CO