-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ファイルを取得しています.このExcelファイルを介して値がスピードメーターに表示されます.しかし、送信ボタンをクリックすると、スピードメーターのニドルが0になります..スピードメーターにExcelファイルの値が表示されません. .

関数 checkfile(sender) は検証用です 関数 readdata(x,y) は Excel ファイルの読み取り用 関数 drawWithInputValue() は手動での出力用です.. 同様に、テキスト名「txtspeed」に 40 の値を入力したとします。 Drawボタンをクリックすると、ハンドルを回転させることで速度計に値が表示されます

関数 drawWithexcelValue(val) は、Excel ファイルを読み取り、その値を出力に表示するためのものです。

ここに問題があります.. Excel ファイルに名前と値があるとします。名前の値はインド 35 中国 46 米国 73 です。送信ボタンをクリックすると、最初に 35 が表示され、46 と 73 が表示されます。名前..しかし、私のコードによれば、送信ボタンをクリックすると、Excelファイルの値が表示されず、ゼロが表示されるだけです... HELP !!!!!!

4

1 に答える 1

1

.Cells()expectsの呼び出しのRowIndex後にColumnIndex. x一般的な命名方法では、列を参照し、行を参照することをお勧めしますy。それが正しい場合、引数を間違った順序で渡しています。そのはず:

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

他にもいくつかの問題に気付きます。

  • コメントの 1 つにスラッシュの代わりにバックスラッシュを使用しています。これにより、構文エラーが発生します。
  • ファイル入力を使用することはありません。Excel ファイルへのパスはハードコードされています。
  • に値を渡していますがdrawWithexcelValue()、プロパティにアクセスしようとしていvalueます。セルへの参照を渡していると思いますか?
  • setTimeout()関数参照の代わりに文字列を渡しています。技術的には、それは合法ですが、古い学校です。
  • あなたのdrawWithXValue()機能はほぼ同じです。共通の機能を共有する 1 つの関数を作成する必要があります。
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);
}
于 2013-06-25T22:00:52.297 に答える