Использование автоматизации для получения текста из Excel. Если ячейка слишком узкая, получите #####. Как я могу избежать этого? - PullRequest
1 голос
/ 23 января 2009

Я использую Automation для получения текста из листа Excel. Я делаю это, потому что мне нужно отформатированное значение (получение значения ячейки не применяет никакого форматирования). Если столбец, в котором находится ячейка, слишком узкий, я получаю «#####» так же, как если бы я смотрел электронную таблицу через Excel. Как я могу избежать этого?

EDIT:

Вот соответствующий код:

// Return the (string) value of a cell
HRESULT CDialogImport::GetCellValue(IRange *irange, int irow, int icol, CString &cstrValue)
{
// Get dispatch interface for the cell at irow,icol
COleVariant vCell;
HRESULT hr = AutoWrap(
                    DISPATCH_PROPERTYGET, 
                    &vCell, 
                    irange, 
                    L"Item", 
                    2,
                    COleVariant((short)(icol+1)), 
                    COleVariant((short)(irow+1)));
if (FAILED(hr)) return hr;

// Use the dispatch interface to get the value of the cell
COleVariant result;
hr = AutoWrap(
                DISPATCH_PROPERTYGET, 
                &result, 
                vCell.pdispVal, 
                L"Text", 
                0);
if (SUCCEEDED(hr))
    {
    cstrValue = result; 
    }

return hr;
}

Ответы [ 2 ]

2 голосов
/ 26 января 2009

Интерфейс IRange обеспечивает метод AutoFit().

Согласно документации , при вызове этого столбцы станут достаточно широкими, чтобы соответствовать их содержимому. ( Это документация по взаимодействию .NET, но я не ожидаю отличий здесь )

Помните, что (выделено мое):

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

0 голосов
/ 23 января 2009

Вы должны быть в состоянии получить и установить ширину столбца (rangeobject.ColumnWidth) - увеличение ширины перед захватом текста должно помочь.

...