2012-07-07 88 views
3

我已經創建了一個將從本地計算機使用的HTML表單,並希望將表單數據保存爲CSV文件。使用Javascript或VBscript將本地Html表單數據導出爲CSV

每次提交表單時,都應該在CSV文件中添加一行。

這需要在本地運行,因此無法使用PHP或JSP。

任何幫助或想法表示讚賞。

+0

除非您受到(合理的)安全限制,否則瀏覽器無法訪問本地文件系統。除非你的'申請'是嚴格'一個用戶,單一過程',寫入.csv是有風險的。所以沒有關於你想達到什麼的更多細節,答案是:不要嘗試。 – 2012-07-07 07:30:17

+0

我想要一些調查由一些人完成,並將結果直接保存到CSV文件中。它的工作電腦,所以不能使用Excel表格或類似的東西。任何指針,這是非常感謝。 – 2012-07-08 03:07:40

回答

0

@ Ekkehard.Horner是正確的,因爲瀏覽器不能直接寫入本地文件系統。

但是,當提交表單時,如果您的瀏覽器啓用了JavaScript,當然可以更新瀏覽器窗口的另一部分。如果這是您的目標,您可以將瀏覽器中的累積內容剪切並粘貼到文件中。

這裏有一個簡單的例子,我放在一起說明了這一概念,只是一個小JavaScript和一些簡單的表單元素:

<?xml version="1.0" encoding="UTF-8"?> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
<title>Capture Form Fields to CSV</title> 
<script type="text/javascript"> 
<!-- 
function saveValues() { 
    var frm = document.form1; 

    var record = "" 
      +  frm.text1.value 
      + "," + frm.text2.value 
      + "," + frm.text3.value 
      + "\n"; 

    frm.textarea1.value += record; 
} 

function clearText() { 
    document.form1.textarea1.value = ""; 
} 
//--> 
</script> 
</head> 
<body> 
<h1>Capture Form Fields to CSV</h1> 

<form name="form1" action="javascript:null"> 
    <p> 
    F1: <input name="text1" type="text" value="field1" /><br /> 
    F2: <input name="text2" type="text" value="field2"/><br /> 
    F3: <input name="text3" type="text" value="field3"/> 
    </p> 
    <p> 
    <input name="save" type="button" value="Save" 
      onclick="saveValues(); return false"/> 
    &#0160; 
    <input name="clear" type="button" value="Clear" 
      onclick="clearText(); return false"/> 
    </p> 
    <p> 
    <i>Click 'Save' to add content</i><br /> 
    <textarea name="textarea1" rows="5" cols="40"></textarea> 
    </p> 
</form> 

</body> 
</html> 

你肯定能得到比這更愛好者,如果你願意通過JavaScript庫(如jQuery)潛入DHTML。只要考慮這個網站提供的奇妙的編輯模式!

+0

非常感謝大衛。這當然有幫助,但目標是直接收集CSV文件中提供的信息。這需要讓多個用戶一次訪問它。可以做任何事情,以便多個用戶可以一次訪問並保存它。它需要在一個普通的瀏覽器上完成,並且沒有太多的插件。 JavaScript已啓用。 – 2012-07-08 03:05:01

+0

嗯,一個非常不尋常的要求! @Teemu給了你MSIE和'FileSystemObject'的一個可能的方法。當然,你需要把CSV文件放在網絡上。由於這是一個多用戶情況,您需要創建一個鎖,以便用戶可以獲得對CSV文件的臨時獨佔寫權限。 'CreateFolder()'是原子的,所以你可以圍繞它封裝一個鎖定例程。查看我的帖子[here](http://stackoverflow.com/a/11371416/1497596),獲取指向下載Microsoft完整WSH/VBScript參考的指針,作爲Windows幫助文件。 – DavidRR 2012-07-09 23:58:47

+0

@DavidRR非常感興趣的鏈接(script56.chm)。現在我不必通過慢速連接瀏覽MSDN ... – Teemu 2012-07-10 11:13:27

1

我認爲這是一個IE專用問題(VBScript)。如果是這樣,您可以使用名爲FileSystemObject的ActiveXObject。

的JavaScript:

csv=[]; // Collect form values to this array. 

function saveFile(csv){ 
    var fso,oStream; 
    fso=new ActiveXObject('Scripting.FileSystemObject'); 
    oStream=fso.OpenTextFile('absolute_file_path',8,true); 
    oStream.WriteLine(csv.join(',')); 
    oStream.Close(); 
    return; 
} 

function readFile(path){ 
    var fso,iStream,n,csv=[]; 
    fso=new ActiveXObject('Scripting.FileSystemObject'); 
    iStream=fso.OpenTextFile(path,1,true); 
    for(n=0;!iStream.AtEndOfStream;n++){ 
     csv[n]=iStream.ReadLine().split(','); 
    } 
    iStream.Close(); 
    return csv; 
} 

您可以閱讀MSDN更多關於FileSystemObject的。

0

老問題,但我想有一個良好的堅實響應更新:

另一種方式是到將要運行腳本的機器上使用的仿真器。通過這種方式,您可以像構建服務器時一樣構建表單處理腳本。檢查出WAMP(或Mac的MAMP),它將在您的系統上創建一個包含Apache和PHP/MySQL的自包含運行實例。然後,您只需將網站的文件放入仿真器指定的目錄(通常爲'www'或'htdocs'),然後您可以通過瀏覽器在本地運行它,就好像它直接在服務器上使用PHP/MySQL一樣。

相關問題