有这个Excel文件,我希望用户能够从我的服务器下载.单击"下载"按钮后,必须有一种简单的方法来启动文件下载...但我不知道如何实现这一点.
到目前为止我有这个:(VBscript和ASP)
<head>
<script type="text/javascript" src="overzicht.js"></script>
</head>
Set fs=Server.CreateObject("Scripting.FileSystemObject")
if (fs.FileExists("c:\file.xls"))=true then 'fake filename D:
response.write("<input type='button' value='Download Masterfile' class='button' onclick='exportmasterfile();' /><br />")
else
response.write("Masterfile not found. <br />")
end if
set fs=nothing
Run Code Online (Sandbox Code Playgroud)
javascript函数为空.
是否可以从JavaScript调用调用VBScript函数,或者从VBScript调用中调用JavaScript?
安装新服务器后,我遇到了一个问题.
我有很多.vbs文件,都需要在wscript中运行,原因,我使用所有这些命令,如WScript.Echo"hello"
我希望能够在双击VBScript文件时看到输出.
但是当我右键单击vbs文件时,我看到控制台,我想在全局范围内将默认值更改为Windows主机!
我怎样才能做到这一点?
我阅读了Eric Lippert关于VBScript中默认属性语义的文章:http://blogs.msdn.com/b/ericlippert/archive/2005/08/30/458051.aspx
它说:
IDispatch :: Invoke的实现者的规则是,如果满足以下所有条件:
- 调用者调用属性
- 调用者传递参数列表
- 该属性实际上并没有采用参数列表
- 该属性返回一个对象
- 该对象具有默认属性
- 该默认属性采用参数列表
然后使用参数列表调用默认属性.奇怪但真实.
这似乎是一个奇怪的规则,但是当你使用集合时它是非常宝贵的.或者至少,它会,但我似乎无法让它工作.
class Test1
public property get foo
set foo = new Test2
end property
end class
class Test2
public default property get bar (arg)
Response.Write arg
end property
end class
dim t: set t = new Test1
Response.Write TypeName(t.foo) ' => "Test2"
t.foo.bar("Hello, World!") ' => "Hello, World!"
t.foo("Hello, World!") => "Microsoft VBScript runtime error '800a01c2' / Wrong number of arguments or invalid property …Run Code Online (Sandbox Code Playgroud) 我正在使用以下代码片段来确定我的vbscript正在运行的进程ID:
On Error Resume Next
Dim iMyPID : iMyPID = GetObject("winmgmts:root\cimv2").Get("Win32_Process.Handle='" & CreateObject("WScript.Shell").Exec("mshta.exe").ProcessID & "'").ParentProcessId
If Err.Number <> 0 Then Call Handle_Error(Err.Description)
On Error Goto 0
Run Code Online (Sandbox Code Playgroud)
在我的Windows 7(32位)计算机上,大约90%的时间都可以运行,并且iMyPID包含当前运行脚本的进程ID.但是,有10%的时间Handle_Error会被错误消息" SWbemServicesEX:Not found " 调用.
最近运行Windows 7(64位)的其他人报告Handle_Error总是被错误消息" Out of memory " 调用.这似乎是一个疯狂的错误消息,只是为了找到你自己的进程ID!
任何人都可以推荐更好的方法吗?
我有一个批处理文件来执行VB脚本.虽然通过双击执行批处理文件将起作用,但是当我使用C#完成相同的操作时,它在本地环境中工作但不在登台服务器(Windows Server 2008r2)中工作,是否需要申请此执行的任何权限级别.从登台服务器,我可以双击并执行批处理文件...
我已使用管理员帐户登录服务器并将应用程序作为localhost浏览.
从C#执行批处理文件有什么我遗漏的,
我不认为我的C#代码有任何问题,因为它在我的本地环境中工作正常,无论如何以下是我的C#代码,
if (File.Exists(FileName*))
{
System.Diagnostics.ProcessStartInfo p = new System.Diagnostics.ProcessStartInfo(FileName);
System.Diagnostics.Process proc = new System.Diagnostics.Process();
proc.StartInfo.FileName = FileName;
proc.StartInfo.RedirectStandardError = true;
proc.StartInfo.RedirectStandardOutput = true;
proc.StartInfo.UseShellExecute = false;
proc.Start();
proc.WaitForExit();
}
else
{
lblMsg.Text = "Sorry unable to process you request";
}
Run Code Online (Sandbox Code Playgroud)
*FileName是批处理文件的路径.此外,我已经设置了包含批处理文件和vbs文件的文件夹的完全权限.
考虑以下两个涉及VBScript中按位比较的条件:
If 1 And 3 Then WScript.Echo "yes" Else WScript.Echo "no"
If Not(1 And 3) Then WScript.Echo "yes" Else WScript.Echo "no"
Run Code Online (Sandbox Code Playgroud)
我认为输出应该是:
yes
no
Run Code Online (Sandbox Code Playgroud)
但实际输出是:
yes
yes
Run Code Online (Sandbox Code Playgroud)
等待一秒钟,所述Not操作者应该在的表达式执行逻辑非.据我所知,逻辑否定true是false.我必须得出结论认为它不符合这一承诺吗?怎么样,为什么以及这里发生了什么?理由是什么,如果有的话?
如何判断Excel 2007电子表格是否已打开且WHO是否已使用VBScript打开它?
我试图弄清楚Excel工作簿当前是否由另一个用户打开并返回该用户在我的脚本中的用户.
我已经找出了确定工作簿目前是否开放的人.这是一种解决方法,但我基本上打开工作簿并检查它是否是只读的.这很完美; 我测试了它.
我知道这是可能的,因为如果您通过浏览器打开文件,Excel会为您提供打开文件的用户.
这是我的代码(isWorkbookOpen.vbs):
Set objExcelTestWorkbook = CreateObject("Excel.Application")
objExcelTestWorkbook.DisplayAlerts = False 'doesn't display overwrite alert
testWorkbookFile = "I:\test_workbook.xlsx"
Set objBook = objExcelTestWorkbook.Workbooks.open(testWorkbookFile)
If objBook.ReadOnly Then
Wscript.echo "The file is read only"
Call EndScript
Else
Wscript.echo "The file is available"
Call EndScript
End If
Function EndScript
objExcelTestWorkbook.Workbooks.close
objExcelTestWorkbook.Quit
WScript.Echo "Closed " & testWorkbookFile
WScript.Quit
End Function
Run Code Online (Sandbox Code Playgroud)
另外,我从命令行运行它:
cscript isWorkbookOpen.vbs
Run Code Online (Sandbox Code Playgroud) 我有一个xlsx启用宏的文件.如何在任务管理器中设置它,以便每天上午9点任务管理器打开工作簿,激活宏并关闭工作簿.
到目前为止我正在使用
Application.OnTime . . .
但我意识到保持xlsm文件打开是不方便的
今天提出了关于范围的问题,它让我思考.
我一直都了解VBScript范围以及如何声明全局和本地.我想到,虽然我从不使用Public变量,但Dim在全局声明时往往会使用变量.
据我所知,它Dim是相同的Public,但如果是这样的话,为什么同时拥有它们呢?这两者之间是否存在差异,使用其中一种是不错的做法?
更新:
这个问题纯粹是针对VBScript而不是VBA,特别是在Classic ASP的背景下.
vbscript ×10
asp-classic ×3
excel ×2
javascript ×2
asp.net ×1
batch-file ×1
boolean ×1
c# ×1
excel-2007 ×1
excel-vba ×1
pid ×1
properties ×1
vba ×1
wsh ×1