2016-10-05 11 views
0

Я знаю, что WorkbookView имеет метод RangeToLocation (http://www.spreadsheetgear.com/support/help/spreadsheetgear.net.7.0/#SpreadsheetGear2012~SpreadsheetGear.Windows.Forms.WorkbookView~RangeToLocation(Double,Double,Double,Double).html), но если приложение не является Windows Forms, которое не будет его обрезать.Получить координаты пикселя ячейки с помощью SpreadSheetgear (не Windows Forms)

К сожалению, я не смог найти правильный метод или свойство на интерфейсах, отличных от этого RangeToLocation. Существует грязное обходное решение: SpreadsheetGear.Drawing.Image обеспечивает способ создания изображения области. Я мог бы использовать эту функцию для создания изображения из A1 (как верхняя + левая ячейка) в ячейку, которая находится сверху + слева по сравнению с ячейкой, в которой я заинтересован (это будет нижняя + правая ячейка области рисования) , Если бы я измерил высоту/ширину этого конкретного изображения, я бы получил координаты, которые я хочу, но для сотен ячеек это было бы много ненужной работы.

Надеюсь, что есть официальный способ, который я забыл вместо того, что я описал.

ответ

1

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

Что вы можете сделать, это использовать IWorksheetWindowInfo. RowToPoints (...) и ColumnToPoints (...), потенциально в комбинации с IRange. Width и Height, для измерения координат и размеров диапазона в единицах единиц, которые являются абсолютными независимыми от устройства единицами (72 Точка == 1 дюйм).

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

Пример:

// Create workbook and some local variables. 
IWorkbook workbook = Factory.GetWorkbook(); 
IWorksheet worksheet = workbook.Worksheets["Sheet1"]; 
IWorksheetWindowInfo windowInfo = worksheet.WindowInfo; 

// Get some measurements for B2:D20 (relative to the top-left corner of the 
// worksheet and in Point units) 
IRange range = worksheet.Cells["B2:D20"]; 
double left = windowInfo.ColumnToPoints(range.Column); 
double top = windowInfo.RowToPoints(range.Row); 
double right = left + range.Width; 
double bottom = top + range.Height; 
Console.WriteLine("{0} - Left={1}, Top={2}, Right={3}, Bottom={4}", 
    range.Address, left, top, right, bottom); 
// OUTPUT: $B$2:$D$20 - Left=51.0921431556344, Top=14.95, Right=204.368572622538, Bottom=299 
+0

Когда 'SpreadsheetGear.Drawing.Image' экземпляр для области, а затем' GetBitmap' вызывается на том, что полученное изображение в основном 72 точек на дюйм? –

+0

Я заметил, что 'SpreadsheetGear.Drawing.Image' имеет' GetSize() ', поэтому мне не пришлось бы полностью переходить к' GetBitmap() ', но я проверю' RowToPoints' и 'ColumnToPoints' , Я чувствую, что они будут потреблять меньше ресурсов, чем рендер. –

+0

Хороший фрагмент кода –