2015-01-12 1 views
0

У меня есть таблица html, которую я экспортирую в файл excel, который я могу создать, загрузить и экспортировать в формат .xls.Как вызвать функцию Javascript, которая изменяет таблицу html перед экспортом в excel?

После того, как я закончил добавление значения в таблицу через различного SQL заявления, я вызываю в яваскрипте функцию, которую я использую, чтобы проверить таблицу нулевых значений, если «тд» таблицы (соответственно) имеет нулевой значения он вводит 0 в это 'td'.

Теперь проблема заключается в том, что я вызываю функцию на window.onload после нажатия на экспорт в excel, на другой странице, например, если он просто загружает таблицу без запуска скрипта, а файл excel по-прежнему имеет пустой (null) в них.

Но если я беру код, который записывает информацию в файл первенствовать и просто отобразить его как обычный HTML страницы, он вызывает функцию и устанавливает нулевые значения 0.

Так мой думаю, что функция полностью исключена, и я не знаю, как включить в ту часть, где я пишу файл excel.

Ниже мой пример кода из Java-первых, и код, я использую для записи в файл Excel:

<script> 
    window.onload = function change() { 
    var count='0'; 
    var TDs=document.getElementsByTagName('td') 
    var length=TDs.length; 

     i='0'; 
     while(i<length){ 
     if(TDs[i].innerHTML==''){ 
     count++; 
     TDs[i].innerHTML = "0"; 
     } 
     i++; 
     } 
    } 
     </script> 
<% 
    Response.Clear 
      Response.Buffer = true 
      Response.ContentType = "application/vnd.ms-excel" 
      if ModuleName = "*ALL*" then 
       Response.AddHeader "Content-disposition", "attachment;filename=" & CourseName & ".xls" 
      else 
       Response.AddHeader "Content-disposition", "attachment;filename=" & ModuleName & ".xls" 
      end if 
      Response.Charset = "" 
    !!!the code for the creating of the tables is in between here!!! 
      Response.End 
%> 

здесь таблица, где я размещаю -1 и 0. * Заметим, что это находится между четырьмя циклами и тремя другими таблицами.

<tr> 
         <td width="50%"><font face="Arial" size="1"><%=rsUserAnswers("FileText")%></td> 
         <td width="50%"><font face="Arial" size="1"><%=rsUserAnswers("VoiceFile")%></td> 
         <%if rsUserModules1("LinkType") = "Submit Answer Multi" then 
         readyList1 = Split(rsUserModules1("LinkAction"),",") 
         %> 
          <td width="50%" style="font-family: Arial; font-size: x-small;"> 

           <%For i = 0 TO UBound(readyList1) %> 

            <%if InStr(readyList1(i),"A")>0 then%> 
             <%output=rsUserAnswers("Score1") 
              if output <> "-1" then %> 
              0 
              <%else%> 
              <%=output%> 
              <%end if%> 
            <%end if%> 

            <%if InStr(readyList1(i),"B")>0 then%> 
            <%output=rsUserAnswers("Score2") 
              if output<> "-1" then %> 
              0 
              <%else%> 
              <%=output%> 
              <%end if%> 
            <%end if%> 

            <%if InStr(readyList1(i),"C")>0 then%> 
            <%output=rsUserAnswers("Score3") 
              if output <> "-1" then %> 
              0 
              <%else%> 
              <%=output%> 
              <%end if%> 
            <%end if%> 

            <%if InStr(readyList1(i),"D")>0 then%> 
            <%output=rsUserAnswers("Score4") 
              if output <> "-1" then %> 
              0 
              <%else%> 
              <%=output%> 
              <%end if%> 
            <%end if%> 

            <%if InStr(readyList1(i),"E")>0 then%> 
            <%output=rsUserAnswers("Score5") 
              if output <> "-1" then %> 
              0 
              <%else%> 
              <%=output%> 
              <%end if%> 
            <%end if%> 

            <%if InStr(readyList1(i),"F")>0 then%> 
            <%output=rsUserAnswers("Score6") 
              if output <> "-1" then %> 
              0 
              <%else%> 
              <%=output%> 
              <%end if%> 
            <%end if%> 

            <%if InStr(readyList1(i),"G")>0 then%> 
            <%output=rsUserAnswers("Score7") 
              if output <> "-1" then %> 
              0 
              <%else%> 
              <%=output%> 
              <%end if%> 
            <%end if%> 

            <%if InStr(readyList1(i),"H")>0 then%> 
             <%output=rsUserAnswers("Score8") 
             if output <> "-1" then %> 
              0 
              <%else%> 
              <%=output%> 
              <%end if%> 
            <%end if%> 

           <%next%> 

          </td> 
         <%else%> 
          <td width="50%"><font face="Arial" size="1"><%=rsUserAnswers("Score")%></td> 
         <%end if%> 

        </tr> 

rsUserAnswer (Score1,2,3,4,5,6,7,8) отдельные столбцы, созданные в случае заявления в SQL.

результат я получаю из приведенной выше таблицы, как так:

AnswerText VoiceFile  Score 
right   none   -1 
wrong   none   'blank' 
wrong   none   'blank' 
right   none   -1 

, но это не правильно мне это нужно так:

AnswerText VoiceFile  Score 
right   none   -1 
wrong   none   0 
wrong   none   0 
right   none   -1 

, но ваш (Wizard @Shadow) просто дает я последний вход вроде:

AnswerText VoiceFile  Score 
right   none   0 <--- needs to be -1 
wrong   none   0 
wrong   none   0 
right   none   -1 
+0

Есть другой способ добавления нулей, чтобы очистить ячейки таблицы на HTML стороны без использования Javascript или JQuery. Я пробовал использовать css, но это тоже не работает. –

+1

Почему бы просто не сделать это на стороне сервера? Вы можете использовать JScript, если вы предпочитаете синтаксис JavaScript над VBScript. :) –

+0

Я пытался. Его просто то, как я собираю информацию из базы данных, делает ее настолько трудной, потому что нет никакой связи между значениями в базе данных (ну, они связаны, просто что нет значения). позвольте мне направить вас к одному из моих старых вопросов без ответа, и вы можете получить эту идею. –

ответ

0

Я решил свой вопрос! И спасибо Shadow Wizard

Что я делал, вместо того, чтобы добавлять код для записи таблиц для Excel с использованием ответа, используйте сам javascript для отправки таблиц в excel. Мое первоначальное мышление состояло в том, чтобы сначала загрузить и отобразить таблицу HTML, а затем, как только это было сделано, дайте пользователю кнопку выбрать для экспорта (отсюда функция javascript, указанная в ссылке ниже).

Так что если у вас есть jquery или javascript, который экспортирует вашу таблицу в excel, и у вас есть пустые или нулевые значения в ваших ячейках вашей таблицы или вложенных таблицах, вы можете добавить этот javascript, используя тег onload для тела, чтобы выполнить функцию для добавления нулей или функция Shadow Wizard предоставила мне по умолчанию значение, которое вы установили, если оно пустое или пустое.

<script language="JavaScript"> 
    function change() { 
    var count='0'; 
    var TDs=document.getElementsByTagName('td') 
    var length=TDs.length; 

     i='0'; 
     while(i<length){ 
     if(TDs[i].innerHTML==''){ 
     count++; 
     TDs[i].innerHTML = "0"; 
     } 
     i++; 
     } 
    } 
</script> 

и для примера экспорта в Excel с помощью JavaScript, то следовать этому link.

2

Вы не можете.

Вы отправляете браузер, что-то, что вы (ложно) претендуете на документ Excel.

Браузеру увидит, что вы отправляете документ Excel и передаете его в Excel.

Excel откроет его, обнаружит его не является документом Excel, но признает, что он является документом HTML и пытается преобразовать его в документ Excel.

В Excel не будет реализован JavaScript, встроенный в HTML.

Если вы хотите изменить HTML-код, сделайте это с кодом на стороне сервера.

+0

Хорошо, я вижу, что это достаточно справедливо, но можно ли изменить таблицу, и как только все изменения будут выполнены, отправьте ее, чтобы преуспеть? может быть, глупый вопрос, который я только что спросил ... Не могли бы вы поделиться некоторыми ссылками на примерах, пожалуйста? –

1

Это может быть проще, чем вы думаете.

Есть только три экземпляра, где ячейка таблицы может оказаться пустой, поэтому в этих трех проверить эту серверную сторону и назначить «0» в таком случае.

Для этого сначала такой функции:

<% 
Function DefaultWhenEmpty(sValue, sDefaultValue) 
    If IsNull(sValue) Or sValue="" Then 
     DefaultWhenEmpty = sDefaultValue 
    Else 
     DefaultWhenEmpty = sValue 
    End If 
End Function 
%> 

Затем измените те части коды для использования функции:

<td width="50%"><font face="Arial" size="1"><%=DefaultWhenEmpty(rsUserAnswers("FileText"), "0")%></td> 
<td width="50%"><font face="Arial" size="1"><%=DefaultWhenEmpty(rsUserAnswers("VoiceFile"), "0")%></td> 
... 
<td width="50%"><font face="Arial" size="1"><%=DefaultWhenEmpty(rsUserAnswers("Score"), "0"%></td> 

Это вызывает клетки, чтобы иметь «0» вместо того, чтобы просто пустой.

+0

Я пробовал код выше, и он работает, но единственная проблема в том, что если я получу A, B, C в качестве ответа, он будет помещать только -1 для C. Если вы посмотрите на код, который я разместил по этой ссылке: http://stackoverflow.com/questions/27374501/how-would-one-go-about-gathering-information-from-one-column-in-an-sql-database , где содержатся заявления о случаях, я использую что для позиционирования -1 в таблице конкретного td. –

+0

A, B, C проверяется в операторе case sql, который возвращает позицию и значение -1 в rsUserAnswer («Score1») (Score1 является набором для A). поэтому для C это будет rsUserAnswer («Оценка3»), что означает позицию 3 в ячейке таблицы td. –

+0

Извините, я вас не понимаю. Где вы видите -1? Вы хотите сделать это 0 вместо этого? –

Смежные вопросы