Достигнуть результата очень просто, просто используйте:
$sum = 0; // you need to intillize variable sum here
for($i = 1; $i <= 5; $i++) {
$sum = $sum + $i; //you can add all the value in sum and echo it.
echo $sum . "<br>";
}
Самый простой подход может заключаться в встроить логику сравнения Javascript в компонент COM напрямую с помощью Javascript. Это возможно с помощью так называемого « Windows Script Components ».
Вот руководство по созданию WSC .
Компонент сценария Windows - это компонент COM, который определяется в сценарии. Интерфейс к компоненту осуществляется через COM, что означает, что он совместим с VBA. Логика реализована на любом языке, совместимом с Windows Scripting Hosting, например JavaScript или VBScript. WSC определяется в одном XML-файле, который включает логику, идентификатор класса компонента, методы, логику регистрации и т. Д.
Также доступен инструмент , помогающий в создании WSC . По сути, это нечто вроде мастера, который задает вам вопросы и заполняет шаблон XML. Лично я просто начал с примера файла .wsc и отредактировал его вручную с помощью текстового редактора. Это довольно понятно.
Компонент COM, определенный таким образом в сценарии (в файле .wsc), вызывается, как и любой другой компонент COM, из любой среды, которая может танцевать с COM.
ОБНОВЛЕНИЕ : Я потратил несколько минут и создал WSC для GoogleDiff. Вот она.
<?xml version="1.0"?>
<package>
<component id="Cheeso.Google.DiffMatchPatch">
<comment>
COM Wrapper on the Diff/Match/Patch logic published by Google at http://code.google.com/p/google-diff-match-patch/.
</comment>
<?component error="true" debug="true"?>
<registration
description="WSC Component for Google Diff/Match/Patch"
progid="Cheeso.Google.DiffMatchPatch"
version="1.00"
classid="{36e400d0-32f7-4778-a521-2a5e1dd7d11c}"
remotable="False">
<script language="VBScript">
<![CDATA[
strComponent = "Cheeso's COM wrapper for Google Diff/Match/Patch"
Function Register
MsgBox strComponent & " - registered."
End Function
Function Unregister
MsgBox strComponent & " - unregistered."
End Function
]]>
</script>
</registration>
<public>
<method name="Diff">
<parameter name="text1"/>
<parameter name="text2"/>
</method>
<method name="DiffFast">
<parameter name="text1"/>
<parameter name="text2"/>
</method>
</public>
<script language="Javascript">
<![CDATA[
// insert original google diff code here...
// public methods on the component
var dpm = new diff_match_patch();
function Diff(text1, text2)
{
return dpm.diff_main(text1, text2, false);
}
function DiffFast(text1, text2)
{
return dpm.diff_main(text1, text2, true);
}
]]>
</script>
</component>
</package>
Чтобы использовать эту штуку, вы должны ее зарегистрировать. В проводнике щелкните его правой кнопкой мыши и выберите «Зарегистрироваться». или из командной строки: который включает логику, идентификатор класса компонента, методы, логику регистрации и так далее.
Также доступен инструмент , помогающий в создании WSC . По сути, это нечто вроде мастера, который задает вам вопросы и заполняет шаблон XML. Лично я просто начал с примера файла .wsc и отредактировал его вручную с помощью текстового редактора. Это довольно понятно.
Компонент COM, определенный таким образом в скрипте (в файле .wsc), может быть вызван, как и любой другой компонент COM, из любой среды, которая может танцевать с COM.
ОБНОВЛЕНИЕ : Я потратил несколько минут и создал WSC для GoogleDiff. Вот она.
<?xml version="1.0"?>
<package>
<component id="Cheeso.Google.DiffMatchPatch">
<comment>
COM Wrapper on the Diff/Match/Patch logic published by Google at http://code.google.com/p/google-diff-match-patch/.
</comment>
<?component error="true" debug="true"?>
<registration
description="WSC Component for Google Diff/Match/Patch"
progid="Cheeso.Google.DiffMatchPatch"
version="1.00"
classid="{36e400d0-32f7-4778-a521-2a5e1dd7d11c}"
remotable="False">
<script language="VBScript">
<![CDATA[
strComponent = "Cheeso's COM wrapper for Google Diff/Match/Patch"
Function Register
MsgBox strComponent & " - registered."
End Function
Function Unregister
MsgBox strComponent & " - unregistered."
End Function
]]>
</script>
</registration>
<public>
<method name="Diff">
<parameter name="text1"/>
<parameter name="text2"/>
</method>
<method name="DiffFast">
<parameter name="text1"/>
<parameter name="text2"/>
</method>
</public>
<script language="Javascript">
<![CDATA[
// insert original google diff code here...
// public methods on the component
var dpm = new diff_match_patch();
function Diff(text1, text2)
{
return dpm.diff_main(text1, text2, false);
}
function DiffFast(text1, text2)
{
return dpm.diff_main(text1, text2, true);
}
]]>
</script>
</component>
</package>
Чтобы использовать эту штуку, вы должны ее зарегистрировать. В проводнике щелкните его правой кнопкой мыши и выберите «Зарегистрироваться». или из командной строки: который включает логику, идентификатор класса компонента, методы, логику регистрации и так далее.
Также доступен инструмент , помогающий в создании WSC . По сути, это нечто вроде мастера, который задает вам вопросы и заполняет шаблон XML. Лично я просто начал с примера файла .wsc и отредактировал его вручную с помощью текстового редактора. Это довольно понятно.
Компонент COM, определенный таким образом в сценарии (в файле .wsc), вызывается, как и любой другой компонент COM, из любой среды, которая может танцевать с COM.
ОБНОВЛЕНИЕ : Я потратил несколько минут и создал WSC для GoogleDiff. Вот она.
<?xml version="1.0"?>
<package>
<component id="Cheeso.Google.DiffMatchPatch">
<comment>
COM Wrapper on the Diff/Match/Patch logic published by Google at http://code.google.com/p/google-diff-match-patch/.
</comment>
<?component error="true" debug="true"?>
<registration
description="WSC Component for Google Diff/Match/Patch"
progid="Cheeso.Google.DiffMatchPatch"
version="1.00"
classid="{36e400d0-32f7-4778-a521-2a5e1dd7d11c}"
remotable="False">
<script language="VBScript">
<![CDATA[
strComponent = "Cheeso's COM wrapper for Google Diff/Match/Patch"
Function Register
MsgBox strComponent & " - registered."
End Function
Function Unregister
MsgBox strComponent & " - unregistered."
End Function
]]>
</script>
</registration>
<public>
<method name="Diff">
<parameter name="text1"/>
<parameter name="text2"/>
</method>
<method name="DiffFast">
<parameter name="text1"/>
<parameter name="text2"/>
</method>
</public>
<script language="Javascript">
<![CDATA[
// insert original google diff code here...
// public methods on the component
var dpm = new diff_match_patch();
function Diff(text1, text2)
{
return dpm.diff_main(text1, text2, false);
}
function DiffFast(text1, text2)
{
return dpm.diff_main(text1, text2, true);
}
]]>
</script>
</component>
</package>
Чтобы использовать эту штуку, вы должны ее зарегистрировать. В проводнике щелкните его правой кнопкой мыши и выберите «Зарегистрироваться». или из командной строки: и так далее.
Также доступен инструмент , помогающий в создании WSC . По сути, это нечто вроде мастера, который задает вам вопросы и заполняет шаблон XML. Лично я просто начал с примера файла .wsc и отредактировал его вручную с помощью текстового редактора. Это довольно понятно.
Компонент COM, определенный таким образом в сценарии (в файле .wsc), вызывается, как и любой другой компонент COM, из любой среды, которая может танцевать с COM.
ОБНОВЛЕНИЕ : Я потратил несколько минут и создал WSC для GoogleDiff. Вот она.
<?xml version="1.0"?>
<package>
<component id="Cheeso.Google.DiffMatchPatch">
<comment>
COM Wrapper on the Diff/Match/Patch logic published by Google at http://code.google.com/p/google-diff-match-patch/.
</comment>
<?component error="true" debug="true"?>
<registration
description="WSC Component for Google Diff/Match/Patch"
progid="Cheeso.Google.DiffMatchPatch"
version="1.00"
classid="{36e400d0-32f7-4778-a521-2a5e1dd7d11c}"
remotable="False">
<script language="VBScript">
<![CDATA[
strComponent = "Cheeso's COM wrapper for Google Diff/Match/Patch"
Function Register
MsgBox strComponent & " - registered."
End Function
Function Unregister
MsgBox strComponent & " - unregistered."
End Function
]]>
</script>
</registration>
<public>
<method name="Diff">
<parameter name="text1"/>
<parameter name="text2"/>
</method>
<method name="DiffFast">
<parameter name="text1"/>
<parameter name="text2"/>
</method>
</public>
<script language="Javascript">
<![CDATA[
// insert original google diff code here...
// public methods on the component
var dpm = new diff_match_patch();
function Diff(text1, text2)
{
return dpm.diff_main(text1, text2, false);
}
function DiffFast(text1, text2)
{
return dpm.diff_main(text1, text2, true);
}
]]>
</script>
</component>
</package>
Чтобы использовать эту штуку, вы должны ее зарегистрировать. В проводнике щелкните его правой кнопкой мыши и выберите «Зарегистрироваться». или из командной строки: и так далее.
Также доступен инструмент , помогающий в создании WSC . По сути, это нечто вроде мастера, который задает вам вопросы и заполняет шаблон XML. Лично я просто начал с примера файла .wsc и отредактировал его вручную с помощью текстового редактора. Это довольно понятно.
Компонент COM, определенный таким образом в сценарии (в файле .wsc), вызывается, как и любой другой компонент COM, из любой среды, которая может танцевать с COM.
ОБНОВЛЕНИЕ : Я потратил несколько минут и создал WSC для GoogleDiff. Вот она.
<?xml version="1.0"?>
<package>
<component id="Cheeso.Google.DiffMatchPatch">
<comment>
COM Wrapper on the Diff/Match/Patch logic published by Google at http://code.google.com/p/google-diff-match-patch/.
</comment>
<?component error="true" debug="true"?>
<registration
description="WSC Component for Google Diff/Match/Patch"
progid="Cheeso.Google.DiffMatchPatch"
version="1.00"
classid="{36e400d0-32f7-4778-a521-2a5e1dd7d11c}"
remotable="False">
<script language="VBScript">
<![CDATA[
strComponent = "Cheeso's COM wrapper for Google Diff/Match/Patch"
Function Register
MsgBox strComponent & " - registered."
End Function
Function Unregister
MsgBox strComponent & " - unregistered."
End Function
]]>
</script>
</registration>
<public>
<method name="Diff">
<parameter name="text1"/>
<parameter name="text2"/>
</method>
<method name="DiffFast">
<parameter name="text1"/>
<parameter name="text2"/>
</method>
</public>
<script language="Javascript">
<![CDATA[
// insert original google diff code here...
// public methods on the component
var dpm = new diff_match_patch();
function Diff(text1, text2)
{
return dpm.diff_main(text1, text2, false);
}
function DiffFast(text1, text2)
{
return dpm.diff_main(text1, text2, true);
}
]]>
</script>
</component>
</package>
Чтобы использовать эту штуку, вы должны ее зарегистрировать. В проводнике щелкните его правой кнопкой мыши и выберите «Зарегистрироваться». или из командной строки: По сути, это нечто вроде мастера, который задает вам вопросы и заполняет шаблон XML. Лично я просто начал с примера файла .wsc и отредактировал его вручную с помощью текстового редактора. Это довольно понятно.
Компонент COM, определенный таким образом в сценарии (в файле .wsc), вызывается, как и любой другой компонент COM, из любой среды, которая может танцевать с COM.
ОБНОВЛЕНИЕ : Я потратил несколько минут и создал WSC для GoogleDiff. Вот она.
<?xml version="1.0"?>
<package>
<component id="Cheeso.Google.DiffMatchPatch">
<comment>
COM Wrapper on the Diff/Match/Patch logic published by Google at http://code.google.com/p/google-diff-match-patch/.
</comment>
<?component error="true" debug="true"?>
<registration
description="WSC Component for Google Diff/Match/Patch"
progid="Cheeso.Google.DiffMatchPatch"
version="1.00"
classid="{36e400d0-32f7-4778-a521-2a5e1dd7d11c}"
remotable="False">
<script language="VBScript">
<![CDATA[
strComponent = "Cheeso's COM wrapper for Google Diff/Match/Patch"
Function Register
MsgBox strComponent & " - registered."
End Function
Function Unregister
MsgBox strComponent & " - unregistered."
End Function
]]>
</script>
</registration>
<public>
<method name="Diff">
<parameter name="text1"/>
<parameter name="text2"/>
</method>
<method name="DiffFast">
<parameter name="text1"/>
<parameter name="text2"/>
</method>
</public>
<script language="Javascript">
<![CDATA[
// insert original google diff code here...
// public methods on the component
var dpm = new diff_match_patch();
function Diff(text1, text2)
{
return dpm.diff_main(text1, text2, false);
}
function DiffFast(text1, text2)
{
return dpm.diff_main(text1, text2, true);
}
]]>
</script>
</component>
</package>
Чтобы использовать эту штуку, вы должны ее зарегистрировать. В проводнике щелкните его правой кнопкой мыши и выберите «Зарегистрироваться». или из командной строки: По сути, это нечто вроде мастера, который задает вам вопросы и заполняет шаблон XML. Лично я просто начал с примера файла .wsc и отредактировал его вручную с помощью текстового редактора. Это довольно понятно.
Компонент COM, определенный таким образом в скрипте (в файле .wsc), может быть вызван, как и любой другой компонент COM, из любой среды, которая может танцевать с COM.
ОБНОВЛЕНИЕ : Я потратил несколько минут и создал WSC для GoogleDiff. Вот она.
<?xml version="1.0"?>
<package>
<component id="Cheeso.Google.DiffMatchPatch">
<comment>
COM Wrapper on the Diff/Match/Patch logic published by Google at http://code.google.com/p/google-diff-match-patch/.
</comment>
<?component error="true" debug="true"?>
<registration
description="WSC Component for Google Diff/Match/Patch"
progid="Cheeso.Google.DiffMatchPatch"
version="1.00"
classid="{36e400d0-32f7-4778-a521-2a5e1dd7d11c}"
remotable="False">
<script language="VBScript">
<![CDATA[
strComponent = "Cheeso's COM wrapper for Google Diff/Match/Patch"
Function Register
MsgBox strComponent & " - registered."
End Function
Function Unregister
MsgBox strComponent & " - unregistered."
End Function
]]>
</script>
</registration>
<public>
<method name="Diff">
<parameter name="text1"/>
<parameter name="text2"/>
</method>
<method name="DiffFast">
<parameter name="text1"/>
<parameter name="text2"/>
</method>
</public>
<script language="Javascript">
<![CDATA[
// insert original google diff code here...
// public methods on the component
var dpm = new diff_match_patch();
function Diff(text1, text2)
{
return dpm.diff_main(text1, text2, false);
}
function DiffFast(text1, text2)
{
return dpm.diff_main(text1, text2, true);
}
]]>
</script>
</component>
</package>
Чтобы использовать эту штуку, вы должны ее зарегистрировать. В проводнике щелкните его правой кнопкой мыши и выберите «Зарегистрироваться». или из командной строки: wsc) вызывается, как и любой другой компонент COM, из любой среды, которая может танцевать с COM.
ОБНОВЛЕНИЕ : Я потратил несколько минут и создал WSC для GoogleDiff. Вот она.
<?xml version="1.0"?>
<package>
<component id="Cheeso.Google.DiffMatchPatch">
<comment>
COM Wrapper on the Diff/Match/Patch logic published by Google at http://code.google.com/p/google-diff-match-patch/.
</comment>
<?component error="true" debug="true"?>
<registration
description="WSC Component for Google Diff/Match/Patch"
progid="Cheeso.Google.DiffMatchPatch"
version="1.00"
classid="{36e400d0-32f7-4778-a521-2a5e1dd7d11c}"
remotable="False">
<script language="VBScript">
<![CDATA[
strComponent = "Cheeso's COM wrapper for Google Diff/Match/Patch"
Function Register
MsgBox strComponent & " - registered."
End Function
Function Unregister
MsgBox strComponent & " - unregistered."
End Function
]]>
</script>
</registration>
<public>
<method name="Diff">
<parameter name="text1"/>
<parameter name="text2"/>
</method>
<method name="DiffFast">
<parameter name="text1"/>
<parameter name="text2"/>
</method>
</public>
<script language="Javascript">
<![CDATA[
// insert original google diff code here...
// public methods on the component
var dpm = new diff_match_patch();
function Diff(text1, text2)
{
return dpm.diff_main(text1, text2, false);
}
function DiffFast(text1, text2)
{
return dpm.diff_main(text1, text2, true);
}
]]>
</script>
</component>
</package>
Чтобы использовать эту штуку, вы должны ее зарегистрировать. В проводнике щелкните его правой кнопкой мыши и выберите «Зарегистрироваться». или из командной строки: wsc) вызывается, как и любой другой компонент COM, из любой среды, которая может танцевать с COM.
ОБНОВЛЕНИЕ : Я потратил несколько минут и создал WSC для GoogleDiff. Вот она.
<?xml version="1.0"?>
<package>
<component id="Cheeso.Google.DiffMatchPatch">
<comment>
COM Wrapper on the Diff/Match/Patch logic published by Google at http://code.google.com/p/google-diff-match-patch/.
</comment>
<?component error="true" debug="true"?>
<registration
description="WSC Component for Google Diff/Match/Patch"
progid="Cheeso.Google.DiffMatchPatch"
version="1.00"
classid="{36e400d0-32f7-4778-a521-2a5e1dd7d11c}"
remotable="False">
<script language="VBScript">
<![CDATA[
strComponent = "Cheeso's COM wrapper for Google Diff/Match/Patch"
Function Register
MsgBox strComponent & " - registered."
End Function
Function Unregister
MsgBox strComponent & " - unregistered."
End Function
]]>
</script>
</registration>
<public>
<method name="Diff">
<parameter name="text1"/>
<parameter name="text2"/>
</method>
<method name="DiffFast">
<parameter name="text1"/>
<parameter name="text2"/>
</method>
</public>
<script language="Javascript">
<![CDATA[
// insert original google diff code here...
// public methods on the component
var dpm = new diff_match_patch();
function Diff(text1, text2)
{
return dpm.diff_main(text1, text2, false);
}
function DiffFast(text1, text2)
{
return dpm.diff_main(text1, text2, true);
}
]]>
</script>
</component>
</package>
Чтобы использовать эту штуку, вы должны ее зарегистрировать. В проводнике щелкните его правой кнопкой мыши и выберите «Зарегистрироваться». или из командной строки: regsvr32 файл: \ c: \ scripts \ GoogleDiff.wsc
Я не пробовал использовать его из VBA, но вот код VBScript, который использует этот компонент.
Sub TestDiff()
dim t1
t1 = "The quick brown fox jumped over the lazy dog."
dim t2
t2 = "The large fat elephant jumped over the cowering flea."
WScript.echo("")
WScript.echo("Instantiating a Diff Component ...")
dim d
set d = WScript.CreateObject("Cheeso.Google.DiffMatchPatch")
WScript.echo("Doing the Diff...")
x = d.Diff(t1, t2)
WScript.echo("")
WScript.echo("Result was of type: " & TypeName(x))
' result is all the diffs, joined by commas.
' Each diff is an integer (position), and a string. These are separated by commas.
WScript.echo("Result : " & x)
WScript.echo("Transform result...")
z= Split(x, ",")
WScript.echo("")
redim diffs(ubound(z)/2)
i = 0
j = 0
For Each item in z
If (j = 0) then
diffs(i) = item
j = j+ 1
Else
diffs(i) = diffs(i) & "," & item
i = i + 1
j = 0
End If
Next
WScript.echo("Results:")
For Each item in diffs
WScript.echo(" " & item)
Next
WScript.echo("Done.")
End Sub
Механизм сценариев Windows позволяет запускать библиотеку JavaScript. По моему опыту, это хорошо работает.
Я бы посоветовал заключить все, что вы делаете, в оболочку COM. VBA лучше всего работает с COM-объектами, поэтому вы можете скомпилировать как компонент .NET, а затем предоставить его как COM-объект, используя функциональные возможности взаимодействия .NET.
В качестве альтернативы вы также можете изучить возможность использования объектов Windows Scripting Host для выполнения файла Javascript и возврата результата.
Вот еще один вариант, который следует рассмотреть, хотя я никоим образом не называю его лучшим.