Получение текста, а не значение с помощью Delphi Ole Automation Excel

Я ищу, чтобы извлечь текст каждой ячейки в заданном диапазоне для электронной таблицы Excel, используя Ole Automation в Delphi 7.

Только сейчас у меня есть функция, которая (при условии, что рабочая книга уже открыта) выбирает диапазон из рабочего листа и заполняет массив Variant, используя функцию .Value2

function GetExcelRange(const AWorkbookIndex: integer; const AWorksheetIndex: integer; const firstCol, lastCol, firstRow, lastRow: integer): Variant; var AWorkbook, ARange: OleVariant; begin Result := Unassigned; if not VarIsEmpty(ExcelApp) then begin if ExcelApp.Workbooks.Count >= AWorkbookIndex then begin AWorkbook := ExcelApp.Workbooks[AWorkbookIndex]; try if AWorkbook.Worksheets.Count >= AWorksheetIndex then begin; ARange := AWorkbook.WorkSheets[AWorksheetIndex].Range[AWorkbook.WorkSheets[AWorksheetIndex].Cells[firstRow, firstCol], AWorkbook.WorkSheets[AWorksheetIndex].Cells[lastRow, lastCol]]; Result := ARange.Value2; end; finally AWorkbook := Unassigned; ARange := Unassigned; end; end; end; end; 

Я бы ожидал, что я могу изменить строку для Result := ARange.Text но он возвращает нулевой объект.

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

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

 function GetCellVariant(const Sheet: ExcelWorksheet; const Row, Col: Integer): OleVariant; function ErrorText(const Cell: ExcelRange; hr: HRESULT): string; const ErrorBase=HRESULT($800A0000); var i: Integer; begin Result := Cell.Text; for i := 1 to Length(Result) do begin if Result[i]<>'#' then begin exit; end; end; if hr=ErrorBase or xlErrDiv0 then begin Result := '#DIV/0!'; end else if hr=ErrorBase or xlErrNA then begin Result := '#N/A'; end else if hr=ErrorBase or xlErrName then begin Result := '#NAME?'; end else if hr=ErrorBase or xlErrNull then begin Result := '#NULL!'; end else if hr=ErrorBase or xlErrNum then begin Result := '#NUM!'; end else if hr=ErrorBase or xlErrRef then begin Result := '#REF!'; end else if hr=ErrorBase or xlErrValue then begin Result := '#VALUE!'; end else begin Result := 'an error'; end; end; var Cell: ExcelRange; hr: HRESULT; begin Cell := GetCellAsRange(Sheet, Row, Col);//effectively this is Sheet.Range if VarIsError(Cell.Value, hr) then begin raise ECellValueError.CreateFmt( 'Cell %s contains %s.', [R1C1toA1(Row,Col), ErrorText(Cell, hr)] ); end; Result := Cell.Value; end; function GetCellString(const Sheet: ExcelWorksheet; const Row, Col: Integer): string; var Value: Variant; Cell: ExcelRange; begin Value := GetCellVariant(Sheet, Row, Col); if VarIsNumeric(Value) then begin Cell := GetCellAsRange(Sheet, Row, Col); Result := Sheet.Application.WorksheetFunction.Text(Cell.Value, Cell.NumberFormatLocal); end else begin Result := ConvertToString(Value);//this converts a Variant to string end; end; 

На самом деле этот код вышел из самого первого вопроса, который я когда-либо задавал здесь в Stack Overflow: как читать форматированное текстовое представление ячейки в Excel

Может быть:

 var WS:tExcelWorksheet; icolor:integer; dato:olevariant; обеспечивающий var WS:tExcelWorksheet; icolor:integer; dato:olevariant; 

 icolor:=WS.cells.item[1,1].Interior.Color; dato:=WS.Cells.item[2, 4].value; dato:=WS.Cells.item[2, 4].textformat; обеспечивающий icolor:=WS.cells.item[1,1].Interior.Color; dato:=WS.Cells.item[2, 4].value; dato:=WS.Cells.item[2, 4].textformat; 

Здесь вы можете найти множество примеров:

http://delphimagic.blogspot.com.es/2013/03/funciones-excel.html http://delphimagic.blogspot.com.es/2013/03/trabajar-con-graficos-en-excel-con.html

  • Эквалайзер контроля формы Excel с учетом очистки фильтров
  • Могу ли я использовать встроенный Excel-решатель для решения этого уравнения? Если нет, как бы вы это сделали?
  • Выяснение объема переменных для правильной работы простой функции
  • Выделите ячейки, содержащие только буквы
  • Excel 2010 VBA, почему формула отображается как текст?
  • поиск и поиск заголовка столбца с использованием макроса excel vba
  • Excel. Идентификация, когда выставляются исключенные коды.
  • Специальная функция Excel
  • Как удалить все данные из подключения SQL Server к Excel?
  • Данные опроса - сумма столбца на основе критериев нескольких столбцов и строк
  • Excel INDIRECT или OFFSET для диапазона переменных Sum
  • Interesting Posts

    Ошибка при использовании readxl: «exdir» не существует

    VBA: найдите последние дни месяца и скопируйте на другой лист

    Как сортировать столбцы столбца таблицы ST с нулевой / пустой ячейкой столбца вверх?

    Определение разницы даты на основе заданного значения

    Генерация от html до xls. Предупреждение "Формат файла отличается от формата, который указывает расширение имени файла"

    Доступ к выпуску LinEst в VBA

    Лучший способ активировать между двумя книгами в цикле Application.OnTime VBA

    Excel VBA: обрезать десятичные разряды с процента

    Не удалось получить доступ к пустым ячейкам EPPlus

    Обработка строк более 2 ГБ

    Excel – нужно найти, если что-либо из столбца A найдено в столбце B

    Как я могу получить доступ к строке выполнения в строке состояния приложения Office

    Excel VBA как искать значения из выбранного диапазона ячеек из другой книги?

    Я хочу, чтобы подпрограмма запускалась каждый раз, когда выбрано значение combobox. Как мне это сделать?

    Цветные ячейки на основе значения ячейки

    Давайте будем гением компьютера.