Avatar billede rashid Praktikant
15. april 2009 - 11:07 Der er 9 kommentarer og
1 løsning

Output til CSV-fil fra HTML-formular

hej

Er det muligt at få et output fra en HTML-formular ud i et CSV-format ved tryk på send ? Der kan kun benyttes javascript og ikke asp/php eller java.
Avatar billede keysersoze Guru
15. april 2009 - 11:24 #1
nej - der skal være "noget" til at danne filen.
Avatar billede rashid Praktikant
15. april 2009 - 11:29 #2
kan man ikke gøre det via javascript ?
Avatar billede keysersoze Guru
15. april 2009 - 15:29 #3
nej
Avatar billede olebole Juniormester
16. april 2009 - 10:16 #4
<ole>

Jo, det kan godt være. Er det et online- eller offline dokument, data skal skrives ind i? Prøv at fortælle lidt mere  =)

/mvh
</bole>
Avatar billede rashid Praktikant
16. april 2009 - 15:17 #5
hej Ole

Det er et offline-dokument (intranet uden ASP, PHP o.l.).
Dvs. Jeg har en intern HTML-formular, hvor der udfyldes navn, fødselsdato, antal vundne kampe, antal tabte kampe.
Dette vil jeg gerne have indlæst i et excel-ark eller en csv-fil.

Jeg har fundet dette script, som anvender FSO-objektet og ser ud til at virke, men måske har du en bedre løsning ? kan se på nettet at jeg ikke er den første der spørger men har desværre ikke fundet nogen brugbare løsninger.

<html>

<head>
<script type="text/javascript">

function CreateExcelSheet()
{

// the DOM enables the table parameters to be used from the id
  var x=myTable.rows

  var xls = new ActiveXObject("Excel.Application")
  //  To make it display in its own window
  xls.visible = true

  xls.Workbooks.Add

      for (i = 0; i < x.length; i++)
      {
        var y = x[i].cells

        for (j = 0; j < y.length; j++)
        {
            xls.Cells( i+1, j+1).Value = y[j].innerText
        }
      }

//  xls.ActiveWorkbook.Save        ()
//  xls.ActiveWorkbook.Close      ()

}

function CreateExcelSheetAutoFit()
{

// the DOM enables the table parameters to be used from the id
  var x=myTable.rows

  var xls    = new ActiveXObject ( "Excel.Application" )

  var handle = xls.Workbooks.Add

      for (i = 0; i < x.length; i++)
      {
        var y = x[i].cells

        for (j = 0; j < y.length; j++)
        {
            xls.Cells( i+1, j+1).Value = y[j].innerText
        }
      }


  //  To make it display in its own window
  xls.visible = true

// Do an "AutoFit" columns in Excel - this is valid only for columns less than or equal to Z
  if (y.length <= 26)
  {
      var rng = xls.Columns(String.fromCharCode(65, 58, 65 + y.length - 1))
      rng.AutoFit
  }

//  xls.ActiveWorkbook.Save        ()
//  xls.ActiveWorkbook.Close      ()

}

function CreateExcelChart()
{

  var xlColumns = 2
  var xlLocationAsObject = 2
  var xl3dPieExploded = 70
  var xlAreaChart = 1

// the DOM enables the table parameters to be used from the id
  var x=myTable.rows

  var xls = new ActiveXObject("Excel.Application")
  //  To make it display in its own window
  xls.visible = true

  xls.Workbooks.Add

      for (i = 0; i < x.length; i++)
      {
        var y = x[i].cells

        for (j = 0; j < y.length; j++)
        {
            xls.Cells( i+1, j+1).Value = y[j].innerText
        }
      }

//      Declare a range object to hold our data
        var rng = xls.Range("A1").Resize(x.length, y.length)

        xls.Charts.Add
        xls.ActiveChart.ChartType = xlAreaChart       
        xls.ActiveChart.SetSourceData (Source = rng, PlotBy = xlColumns)
        xls.ActiveChart.Location (Where = xlLocationAsObject, Name = "Sheet1")

//  xls.ActiveWorkbook.Save        ()
//  xls.ActiveWorkbook.Close      ()

}


function WriteCSVFile()
{
 
  var x = myTable.rows
  var ForWriting = 2
//  var ForAppending = 8
  var TriStateFalse = 0

  var fsObj = new ActiveXObject("Scripting.FileSystemObject")

  var newFile = fsObj.OpenTextFile("c:/temp/ClientSideJScriptFile.csv", ForWriting, true, TriStateFalse)

      for (i = 0; i < x.length; i++)
      {
        var y = x[i].cells
        var strTmp = y[0].innerText
        if (y.length > 0)
    {
            for (j = 1; j < y.length; j++)
            {
              strTmp = strTmp + "," + y[j].innerText
            }
    }

        newFile.WriteLine(strTmp)
      }

  newFile.Close()

}

</script>
<DL>
<DT><A HREF="index.html"><STRONG>Return to LaurenceHolbrook.com Technical Information Index</STRONG></A>
</DL>
<HR>
</head>

<body lang=EN-US background="back.gif" link=blue vlink=purple>
<form>
<input type="button" onclick="CreateExcelSheet()" value="Create Excel Sheet">
<input type="button" onclick="CreateExcelSheetAutoFit()" value="Excel Sheet AutoFit Columns">
<input type="button" onclick="CreateExcelChart()" value="Excel Sheet & Chart">
<BR><BR>
<input type="button" onclick="WriteCSVFile()" value="Create CSV File">
</form>

<%
Put any table here, your little ol' heart desireth
If you change the id, you gotta change it in the script
%>

<table id="myTable" border="1">
<tr> <td>Abe  </td> <td>23</td> </tr>
<tr> <td>Betty </td> <td>34</td> </tr>
<tr> <td>Carol </td> <td>56</td> </tr>
<tr> <td>David </td> <td>24</td> </tr>
<tr> <td>Edward</td> <td>16</td> </tr>
<tr> <td>Floyd </td> <td>19</td> </tr>
<tr> <td>Gary  </td> <td>38</td> </tr>
<tr> <td>Harold</td> <td>28</td> </tr>
</table>

</body>
</html>
Avatar billede olebole Juniormester
16. april 2009 - 23:21 #6
Jeg mener faktisk, man kan gemme et Excel sheet som CSV med:
    objMySheet.SaveAs("c:/temp/ClientSideJScriptFile.csv", 6);

Hvis det ikke lykkes, kan du prøve med denne omskrivning, som øger performance en hel del i forhold til din egen funktion:

function WriteCSVFile() {
    var x = myTable.rows;
    var ForWriting = 2;
    //  var ForAppending = 8;
    var TriStateFalse = 0;
    var fsObj = new ActiveXObject("Scripting.FileSystemObject");
    var newFile = fsObj.OpenTextFile("c:/temp/ClientSideJScriptFile.csv", ForWriting, true, TriStateFalse);
    var aTmp = aTmp2 = [];
    var y, i, j, m, n;
    for (i=0,m=x.length; i<m; i++) {
        aTmp2 = [];
        y = x[i].cells;
        for (j=0,n=y.length; j<n; j++) {
            aTmp2.push(y[j].innerText);
        }
        aTmp.push( aTmp2.join(",") );
    }
    newFile.WriteLine( aTmp.join("\r\n") );
    newFile.Close();
    fsObj = newFile = aTmp = aTmp2 = null;
}
Avatar billede rashid Praktikant
20. april 2009 - 13:10 #7
hej

Ser interessant ud. Det vil jeg helt klart prøve af...

Jeg fandt desværre ud af at det mit script ikke tager variable felter med...
er det muligt at lave outputtet, hvor tabellen ikke er statisk, men hvor 2. kolonne er et input-felter (altså at det er Value der kommer med) ?

<table id="myTable" border="1">
<tr> <td>Name</td> <td><input type="text" name="navn" id="navn"></td>
</tr>
<tr> <td>Id</td> <td><input type="text" name="Cpr" id="Cpr"></td>
</tr>
<tr> <td>Carol </td> <td>&nbsp;</td>
</tr>
<tr> <td>David </td> <td>&nbsp;</td>
</tr>

</table>
Avatar billede rashid Praktikant
20. april 2009 - 13:14 #8
... din omskrivning virker helt perfekt :-)

så mangler jeg blot det med felterne..
Avatar billede rashid Praktikant
22. april 2009 - 10:53 #9
Nåh, men jeg fandt ud af det med felterne, så hvis du sender mig et svar Olebole, så vil jeg give points.

her er den ændrede funktion til skrive til en csv-fil
function WriteCSVFile()
{
 
  var x = myTable.rows
  var ForWriting = 2
//  var ForAppending = 8
  var TriStateFalse = 0

  var fsObj = new ActiveXObject("Scripting.FileSystemObject")

  var newFile = fsObj.OpenTextFile("c:/temp/ClientSideJScriptFile.csv", ForWriting, true, TriStateFalse)

      for (i = 0; i < x.length; i++)
      {
        var y = x[i].cells
        var strTmp = y[0].innerText
        if (y.length > 0)
    {
            for (j = 1; j < y.length; j++)
            {
               
                if(j+1 == y.length)
                {
                     
                    strTmp = strTmp + "," + document.FormX.elements[i].value;
                }
                else
                {
                   
                    strTmp = strTmp + "," + y[j].innerText;
                }
            }
    }

        newFile.WriteLine(strTmp)
      }

  newFile.Close()

}
Avatar billede rashid Praktikant
29. april 2009 - 13:18 #10
lukker
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester