Поиск и обработка данных Excel с использованием JavaScript - PullRequest
5 голосов
/ 24 ноября 2011

У меня есть веб-форма HTML с 5 текстовыми вводами и кнопкой, вызывающей функцию JavaScript. Функция, как она есть, откроет существующий файл Excel, найдет последнюю заполненную строку, вставит новую строку под ней и поместит значения формы, по одному значению в каждую ячейку. Затем он сохраняет и выходит.

Электронная таблица, тем не менее, имеет более 5 столбцов, поэтому функция всегда помещает данные только в столбцы A - E.

function createData(){

    var first = document.getElementById('A').value;
    var second = document.getElementById('B').value;
    var third = document.getElementById('C').value;
    var fourth = document.getElementById('D').value;
    var fifth = document.getElementById('E').value;

    var xlDown = -4121

    var w =new ActiveXObject("Excel.Application");
    w.Visible=true;

    w.Workbooks.Open("file:\\Form.xls");
    objWorksheet = w.Worksheets(1);

    objRange = w.Range("A1");
    objRange.End(xlDown).Activate;
    intNewRow = w.ActiveCell.Row + 1;

    for (i=1; i<10000; i++){
        objWorksheet.Cells(intNewRow, 1) = first;
        objWorksheet.Cells(intNewRow, 2) = second;
        objWorksheet.Cells(intNewRow, 3) = third;
        objWorksheet.Cells(intNewRow, 4) = fourth;
        objWorksheet.Cells(intNewRow, 5) = fifth;
    }
    w.ActiveWorkbook.SaveAs("file:\\Form.xls");
    w.Quit();
              alert("The data has been added to the spreadsheet");
}

Что я на самом деле хочу сделать, так это:

Электронная таблица может содержать или не содержать данные в столбцах A-G в каждой строке. Я хочу, чтобы функция осуществляла поиск в столбце B существующего листа по текстовому значению «first» (как определено выше). Если найдено, вставьте остальные 4 значения в соответствующие ячейки в столбцах H-K. Если не найдено, вставьте все 5 значений в новую строку «first» в столбце B, а остальные в столбец H-K.

Я давно этим занимаюсь и, похоже, не могу его взломать, хотя знаю, что это можно сделать.

Любая помощь будет принята с благодарностью!

1 Ответ

3 голосов
/ 25 ноября 2011

Ну, кажется, я нашел ответ методом проб и ошибок.Она не красивая, но это работает.Я посмотрю на оптимизацию кода, как позволит время.

function createData(){      

var Name = document.getElementById('txtName').value;

var first = document.getElementById('A').value;     
var second = document.getElementById('B').value;     
var third = document.getElementById('C').value;     
var fourth = document.getElementById('D').value;     
var fifth = document.getElementById('E').value;      
var xlDown = -4121      

var w =new ActiveXObject("Excel.Application");     
w.Visible=true;      
w.Workbooks.Open("file:\\Form.xls");     

objWorksheet = w.Worksheets(1);      
objRange = w.Range("H3");     
objRange.End(xlDown).Activate;     
intNewRow = w.ActiveCell.Row + 1;      

for (i=4; i<10; i++){
    var a = objWorksheet.Cells(i,2);
    var b = a.Value;
    if(b == Name){
        a.Activate;
        b = w.ActiveCell.Offset(0,6);
        intNew = w.ActiveCell.Row;
        objWorksheet.Cells(intNew, 8) = first
        objWorksheet.Cells(intNew, 9) = second
        objWorksheet.Cells(intNew, 10) = third
        objWorksheet.Cells(intNew, 11) = fourth
        objWorksheet.Cells(intNew, 12) = fifth
    }   
    else{
        objWorksheet.Cells(intNewRow, 8) = first
        objWorksheet.Cells(intNewRow, 9) = second
        objWorksheet.Cells(intNewRow, 10) = third
        objWorksheet.Cells(intNewRow, 11) = fourth
        objWorksheet.Cells(intNewRow, 12) = fifth
    }
}
w.ActiveWorkbook.SaveAs("file:\\\\Test.xls");
w.Quit();
}
...