2013-06-25 2 views
-1

Мне нужно прочитать файл Excel и показать результат на спидометре. Я принял вход, а вот мой HTML и сценариев код, файл Excel содержит имя и значение:Показать выход на спидометре

<input type="text" id="txtSpeed" name="txtSpeed" value="20" maxlength="2" /> 
<input type="button" value="Draw" onclick="drawWithInputValue();"> 
<input type="file" id="file" onchange="checkfile(this);" /> 
<input type="button" id="btnSubmit" onclick="readdata(1, 2)" value="Submit" /> 
function checkfile(sender) { 
    var validExts = new Array(".xlsx", ".xls", ".csv"); 
    var fileExt = sender.value; 
    fileExt = fileExt.substring(fileExt.lastIndexOf('.')); 
    if (validExts.indexOf(fileExt) < 0) { 
     alert("Invalid file selected, valid files are of " + 
      validExts.toString() + " types."); 
     return false; 
    } 
    else return true; 
} 

function readdata(x,y) { 
    try { 
     var excel = new ActiveXObject("Excel.Application"); 
     excel.Visible = false; 
     var excel_file = excel.Workbooks.Open("D:\\Test.xls"); 
     \\ alert(excel_file.worksheets.count); 
     var excel_sheet = excel_file.Worksheets("Sheet1"); 
     var data = excel_sheet.Cells(x, y).Value; 
     //alert(data); 
     drawWithexcelValue(data); 
    } 
    catch (ex) { 
     alert(ex); 
    } 
    // return data; 
} 

и спидометра здесь код

function drawWithInputValue() { 
    var txtSpeed = document.getElementById('txtSpeed'); 
    alert(txtSpeed.value); 
    if (txtSpeed !== null) { 
     iTargetSpeed = txtSpeed.value; 
     // Sanity checks 
     if (isNaN(iTargetSpeed)) { 
      iTargetSpeed = 0; 
     } else if (iTargetSpeed < 0) { 
      iTargetSpeed = 0; 
     } else if (iTargetSpeed > 80) { 
      iTargetSpeed = 80; 
     } 
     job = setTimeout("draw()", 5); 
    } 
} 

function drawWithexcelValue(val) { 
    var txtSpeed = val; 
    if (txtSpeed !== null) { 
     iTargetSpeed = txtSpeed.value; 
     // Sanity checks 
     if (isNaN(iTargetSpeed)) { 
      iTargetSpeed = 0; 
     } else if (iTargetSpeed < 0) { 
      iTargetSpeed = 0; 
     } else if (iTargetSpeed > 80) { 
      iTargetSpeed = 80; 
     } 
     job = setTimeout("draw()", 5); 
    } 
} 

Так я я получаю файл excel file, и через этот файл excel значения должны отображаться на спидометре. Но при нажатии кнопки отправки указатель спидометра переходит на 0. Это не показывает значения файла excel на спидометре.

Функция checkfile (sender) предназначена для проверки Функция readdata (x, y) предназначена для чтения файла excel Функция drawWithInputValue() предназначена для вывода вручную .. например, предположим, что вы указали значение 40 в текстовом названии " txtspeed», то при нажатии на кнопку Draw он будет показывать значение в спидометр, вращая niddle

функция drawWithexcelValue (VAL) для чтения файла первенствует и показать его значение на выходе ..

вот проблема .. предположим, что у нас есть некоторые имена и значения в файле excel, который выглядит следующим образом: значения имени Индия 35 china 46 USA 73 Итак, теперь, нажав кнопку отправки, она должна показать 35 первых и 46 и 73 с именами .. но то, что происходит в соответствии с моим кодом, - это нажать кнопку отправки, чтобы она не показывала значение из файла excel он просто показывает ноль ... ПОМОЩЬ !!!!!!

+0

Ооо !!!! ком-на, где все умные ребята !! Помогите мне решить это пожалуйста – user2502227

+1

Задайте вопрос. – Jack

+0

мой код не показывает мне правильный ответ. Пожалуйста, скажите мне, где я ошибаюсь – user2502227

ответ

1

A .Cells() ожидает RowIndex, а затем ColumnIndex. Общие методы именования показывают, что x относится к столбцу, а y относится к строке. Если это так, то вы передаете свои аргументы в неправильном порядке. Оно должно быть:

var data = excel_sheet.Cells(y, x).Value; 

Я не могу не заметить некоторые другие вопросы:

  • Вы используете обратную косую черту вместо слэш для одного из ваших комментариев. Это приведет к синтаксической ошибке.
  • Вы никогда не используете входной файл - путь к файлу excel жестко закодирован.
  • Вы передаете значение drawWithexcelValue(), но затем вы пытаетесь получить доступ к объекту value. Может быть, вы думаете, что передаете ссылку на камеру?
  • Вы передаете строку в setTimeout() вместо ссылки на функцию. Технически, это законно, но это старая школа.
  • Ваши функции drawWithXValue() почти идентичны.Вы должны создать одну функцию, которая разделяет общую функциональность:
function drawWithValue(val) { 
    iTargetSpeed = val || 0; 
    if (iTargetSpeed < 0) { 
     iTargetSpeed = 0; 
    } else if (iTargetSpeed > 80) { 
     iTargetSpeed = 80; 
    } 
    job = setTimeout(draw, 5); 
} 
function drawWithInputValue() { 
    drawWithValue(document.getElementById('txtSpeed').value); 
} 

Или, даже немного более кратким:

function drawWithValue(val) { 
    iTargetSpeed = Math.max(0, Math.min(80, val || 0)); 
    job = setTimeout(draw, 5); 
} 
+0

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