我有一个带有5个文本输入的HTML Web表单和一个调用JavaScript函数的按钮.现在的功能,将打开一个现有的Excel文件,找到最后填充的行,在其下面插入一个新行并将表单值放入,每个单元格中有一个值.然后保存并退出.
然而,电子表格有多于5列,因此该函数只将数据放入A-E列.
function createData(){
var first = document.getElementById('A').value;
var second = document.getElementById('B').value;
var third = document.getElementById('C').value;
var fourth = document.getElementById('D').value;
var fifth = document.getElementById('E').value;
var xlDown = -4121
var w =new ActiveXObject("Excel.Application");
w.Visible=true;
w.Workbooks.Open("file:\\Form.xls");
objWorksheet = w.Worksheets(1);
objRange = w.Range("A1");
objRange.End(xlDown).Activate;
intNewRow = w.ActiveCell.Row + 1;
for (i=1; i<10000; i++){
objWorksheet.Cells(intNewRow, 1) = first;
objWorksheet.Cells(intNewRow, 2) = second;
objWorksheet.Cells(intNewRow, 3) = third;
objWorksheet.Cells(intNewRow, 4) = fourth;
objWorksheet.Cells(intNewRow, 5) = fifth;
}
w.ActiveWorkbook.SaveAs("file:\\Form.xls");
w.Quit();
alert("The data has been added to …Run Code Online (Sandbox Code Playgroud) 我正在尝试发送一个请求:
ActiveXObject("WinHttp.WinHttpRequest.5.1")
Run Code Online (Sandbox Code Playgroud)
但是,这需要客户证书才能这样做(我们已提供)。
在 PHP cURL 中测试后,我可以这样做:
curl_setopt($SOAP, CURLOPT_SSLCERT,$filepathtocertificate);
Run Code Online (Sandbox Code Playgroud)
哪个工作正常。但是,我必须使用 IIS 运行 asp(javascript) 并指向运行脚本的机器的证书存储:
SetClientCertificate("LOCAL_MACHINE\\Personal\\Certificate subject");
Run Code Online (Sandbox Code Playgroud)
对于我们的实际部署。MS 文档 ( http://msdn.microsoft.com/en-us/library/windows/desktop/aa384055(v=vs.85).aspx ) 建议上述路径必须说明证书的“主题” ,但是证书似乎有几个主题,并且没有几个或所有这些主题的组合似乎产生任何结果,我什至在发送请求之前就遇到了以下错误:
WinHttp.WinHttpRequest error '80072f0c'
A certificate is required to complete client authentication
Run Code Online (Sandbox Code Playgroud)
查看证书存储并使用同一文件夹中的其他脚本显示它们肯定存在,但具有以下主题:
C=US, O=Organisation NAme, OU="Another Organisation Name, Inc.", CN=Organisation Name Root
Run Code Online (Sandbox Code Playgroud)
或者类似的。
关于在证书存储中选择和发送证书需要提供哪些参数 SetClientCertificate 的任何建议将不胜感激。
要使用javascript建立与MySQL数据库的连接,只需执行以下操作即可:
var conn = new ActiveXObject ("ADODB.Connection");
conn.Open("Driver={MySQL ODBC 5.1 Driver};Server=localhost;Database=blah_blah_blah;User=foo;Password=bar;");
Run Code Online (Sandbox Code Playgroud)
但是,ActiveXObject仅在IE浏览器中定义.
其他浏览器怎么样?
有人能告诉我为什么在Windows中运行shell命令拒绝权限以及如何解决?
function executeCommands(inputparms)
{
var oShell = new ActiveXObject("Shell.Application");
var commandtoRun = "C:\\WINDOWS\\Notepad.exe";
if (inputparms != "")
{
var commandParms = document.Form1.filename.value;
}
oShell.ShellExecute(commandtoRun, commandParms, "", "open", "1");
}
Run Code Online (Sandbox Code Playgroud) 我注意到有两种方法可以在JavaScript中创建ActiveX对象,一种是通过嵌入:
<object id="TestControl" classid="clsid:xxx-xx-xx-xx"></object>
Run Code Online (Sandbox Code Playgroud)
然后使用DOM获取对象:
var myControl = document.getElementById('TestControl');
Run Code Online (Sandbox Code Playgroud)
另一种方法是创建ActiveXObject的实例:
var myControl2 = new ActiveXObject('Test.TestControl');
Run Code Online (Sandbox Code Playgroud)
与ActiveX对象的角度究竟有什么不同?一种方法比另一种更好吗?性能有什么不同吗?
谢谢.
我希望对象调用都引用ActiveXObject.但是为什么我们在IE中传递两个不同的参数.1. Msxml2.XMLHTTP和2.Microsoft.XMLHTTP
它们都一样吗?或者他们是浏览器依赖(IE7和IE8)?
我用过两者.我没有得到任何例外.两者对我来说都是一样的.我正在使用IE 8.
这对于Eric Lippert或熟悉JScript引擎实现的Microsoft人员来说确实是一个问题.
我可以这样做:
var obj = new ActiveXObject("My.ProgId");
var methods = GetMethodsViaMagic(obj);
Run Code Online (Sandbox Code Playgroud)
?
(假设COM类型支持IDispatch)
如果是这样,那GetMethodsViaMagic()会是什么样子?
编辑 - 当然,我尝试的第一件事是for...in循环,但这对ActiveX对象上定义的方法和属性不起作用.至少,不是我在.NET中定义并通过暴露的对象ComVisible.
在C#中,我可以像这样定义IDispatch:
[Guid("00020400-0000-0000-c000-000000000046"),
InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
public interface IDispatch
{
int GetTypeInfoCount();
System.Runtime.InteropServices.ComTypes.ITypeInfo
GetTypeInfo([MarshalAs(UnmanagedType.U4)] int iTInfo,
[MarshalAs(UnmanagedType.U4)] int lcid);
[PreserveSig]
int GetIDsOfNames(ref Guid riid,
[MarshalAs(UnmanagedType.LPArray, ArraySubType = UnmanagedType.LPWStr)] string[] rgsNames,
int cNames,
int lcid,
[MarshalAs(UnmanagedType.LPArray)] int[] rgDispId);
[PreserveSig]
int Invoke(int dispIdMember,
ref Guid riid,
[MarshalAs(UnmanagedType.U4)] int lcid,
[MarshalAs(UnmanagedType.U4)] int dwFlags,
ref System.Runtime.InteropServices.ComTypes.DISPPARAMS pDispParams,
[Out, MarshalAs(UnmanagedType.LPArray)] object[] pVarResult,
ref System.Runtime.InteropServices.ComTypes.EXCEPINFO …Run Code Online (Sandbox Code Playgroud) 我希望有一个代码可以取消工作簿中所有工作表的所有名为"CheckBox1"的复选框.遗憾的是,我当前的代码不起作用,我不知道为什么 - 它只适用于活动表.
Private Sub CommandButton1_Click()
Dim Sheet As Worksheet
For Each Sheet In ThisWorkbook.Worksheets
Select Case CheckBox1.Value
Case True: CheckBox1.Value = False
End Select
Next
End Sub
Run Code Online (Sandbox Code Playgroud) 我使用下面的代码从一张纸上复制命令按钮并将其粘贴到另一张纸上:
Sheets("SRC").HasACustomName.Copy
Sheets("TRGT").Range("O1").PasteSpecial
Run Code Online (Sandbox Code Playgroud)
当我粘贴它时,它被重命名HasACustomName为CommandButton1。
我可以以保留名称的方式复制/粘贴它还是在粘贴后更改名称?
ActiveXObject() 构造函数支持不同类型的参数,如下所示:
new ActiveXObject("Msxml2.DOMDocument");
new ActiveXObject("Msxml2.XSLTemplate");
new ActiveXObject("Msxml2.FreeThreadedDOMDocument");
new ActiveXObject("Msxml2.DOMDocument.6.0");
new ActiveXObject("Microsoft.XMLHTTP");
new ActiveXObject("Microsoft.XMLDOM");
new ActiveXObject("Excel.Application");
new ActiveXObject("Word.Application");
new ActiveXObject("Excel.Sheet");
Run Code Online (Sandbox Code Playgroud)
我在哪里可以找到这些参数(activexobject构造函数)?
从这个链接,我发现了一些如下信息
new ActiveXObject(class[, servername]);
Run Code Online (Sandbox Code Playgroud)
class使用语法library.object,其中library是应用程序的名称(例如,Word,Excel)或包含该对象的库,object是要创建的对象的类型或类.servername(可选参数)指定对象所在的服务器的名称.
activexobject ×10
javascript ×5
excel ×3
vba ×2
activex ×1
ajax ×1
asp-classic ×1
certificate ×1
checkbox ×1
excel-vba ×1
firefox ×1
mysql ×1
ssl ×1