我有一个使用 Javascript 执行一些计算然后绘制数据的应用程序,但我想为用户添加选项,以便能够将数据实际下载到 csv 或 xls 文件中。
Javascript(或其他方法)有没有办法让用户按下一个按钮,然后它会提示他们输入文件的名称以将其另存为,然后它会创建一个逗号分隔或 Excel 电子表格?
谢谢!
编辑:
感谢大家的所有建议。希望我能把你们都标记为答案,但现在必须上船了
我有一个使用 Javascript 执行一些计算然后绘制数据的应用程序,但我想为用户添加选项,以便能够将数据实际下载到 csv 或 xls 文件中。
Javascript(或其他方法)有没有办法让用户按下一个按钮,然后它会提示他们输入文件的名称以将其另存为,然后它会创建一个逗号分隔或 Excel 电子表格?
谢谢!
编辑:
感谢大家的所有建议。希望我能把你们都标记为答案,但现在必须上船了
打开一个窗口并将 csv 写入其中并不难。但我不知道javascript更改Content-Type:
标题的任何方法。没有它,它不会提示保存或打开。
您需要服务器的帮助才能执行此操作。您可以将数据以表单变量的形式发送到服务器,并让服务器使用正确的标题将其发送回,Content-type: text/csv
您可能还希望Content-Disposition:
标题为您的文件命名。
是的,但您还需要使用服务器端代码。使用 JavaScript 构建指向页面的链接,该页面将 csv 数据作为附件流回。服务器输出应包含content-disposition
.attachment; filename="fileName.csv"
不,您不能直接从 JavaScript 创建和/或保存文件。在某些浏览器/平台 (IE/Windows) 上,您可以通过 ActiveX 对象创建和写入文件:
function WriteToFile()
{
var fso = new ActiveXObject("Scripting.FileSystemObject");
var s = fso.CreateTextFile("C:\\temp\\Test.txt", true);
s.WriteLine('Hello');
s.Close();
}
另一种解决方案是使用客户端 JavaScript(在浏览器中)将 CSV 数据输出到单独的窗口(或弹出窗口)中,并让用户将其复制/粘贴到 Excel 中。
如果您想以浏览器网站样式进行操作,可能会很困难。但是 Javascript 是一种很好的语言来做到这一点,但你需要使用.hta
而不是普通的.html
. 创建一个.hta
像普通的一样创建一个独立的应用程序.exe
。
这是您要查找的内容ActiveXObject("Excel.Application")
为了将 html 转换为 hta,这里是标签
<HTA:APPLICATION
id="SomeId"
border="thin"
borderStyle="normal"
caption="yes"
maximizeButton="yes"
minimizeButton="yes"
showInTaskbar="yes"
windowState="yes"
innerBorder="yes"
navigable="yes"
scroll="auto"
scrollFlat="yes"
singleinstance="yes"
/>
进一步阅读hta和excel active X
你当然可以用FireBreath编写一个浏览器插件(IE 上的 ActiveX 控件,其他的 NPAPI)来做到这一点;你必须用 C++ 编写它。老实说,我同意其他人建议您改为在服务器端执行此操作,但您可以使用插件来执行此操作,并且不会太难。
I think that it would be possible to do this (up to a certain size limit) with data URIs