bigrunner1
Newbie | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору Помогите с вопросом связанным с cxgrid. Есть грид с датасетом и 6 колонками. Регион, Объект, Объем, объем реализации, размещение и территориальная принадлежность. Вроде все правильно, гружу данные из эксель файла, у колонок тип задаю числовой. Но когда цикл доходит до значения 1 строки столбца Объем возникает ошибка:"Could not convert variant of type (Dispatch) into type integer" В чем может быть проблема? В данных Excel уверен, пробую на маленьком объеме строк(2 ). procedure TFormListOBJ_REQ.dxBarButton17Click(Sender: TObject); const xlCellTypeLastCell = $0000000B; //Тип последней заполненной ячейки var XLApp, Sheet: OLEVariant; RangeMatrix: Variant; x,y,iColIndex, iRowIndex: integer; XLSFile: string; begin XLSFile:='C:\Documents and Settings\EPlan\Рабочий стол\21.xls'; //Создаем объект Excel XLApp := CreateOleObject('Excel.Application'); try //Делаем окно Excel невидимым XLApp.Visible := True; //Открываем Excel XLApp.Workbooks.Open(XLSFile); //Создаем объект страница(Sheet) //и указываем номер листа в книги с которого будем осуществлять чтение Sheet := XLApp.Workbooks[ExtractFileName(XLSFile)].WorkSheets[1]; //активируем последнюю ячейку на листе Sheet.Cells.SpecialCells(xlCellTypeLastCell, EmptyParam).Activate; //получаем номер последней строки x := Sheet.UsedRange.Rows.Count; //получаем номер последнего столбца y := Sheet.UsedRange.Columns.Count; //устанавливаем количество столбцов в CxGrid showmessage('Строк '+IntToStr(x)+' Стоблцов '+IntToStr(y)); with ViewList.DataController do begin // BeginUpdate; // try RecordCount := XLApp.ActiveCell.Row; for iRowIndex := 0 to x-1 do for iColIndex := 0 to y-1 do begin showmessage(Sheet.Cells[iRowIndex+1,iColIndex+1]) ; Values[iRowIndex, iColIndex] := Sheet.Cells[iRowIndex+1,iColIndex+1]; ViewList.Columns[0].DataBinding.ValueType := 'String'; ViewList.Columns[1].DataBinding.ValueTypeClass := TcxStringValueType; ViewList.Columns[2].DataBinding.ValueTypeClass := TcxIntegerValueType; ViewList.Columns[3].DataBinding.ValueTypeClass := TcxFloatValueType; ViewList.Columns[4].DataBinding.ValueTypeClass := TcxFloatValueType; ViewList.Columns[5].DataBinding.ValueTypeClass := TcxStringValueType; ViewList.Columns[6].DataBinding.ValueTypeClass := TcxStringValueType; end // finally z // EndUpdate; // end; end; finally if not VarIsEmpty(XLApp) then begin XLApp.Quit; XLAPP := Unassigned; Sheet := Unassigned; end; end; end; |