我正在尝试将图像映射到excel电子表格中,我需要查找当前单元格的坐标是什么?
此刻我的代码循环遍历每个单元格,直到它在excel中找到匹配的标记,它知道这是放置图片的单元格。
我有单元格,我根本不知道如何获取单元格的顶部和左侧属性?
foreach (ExcelRangeBase cell in range1)
{
}
请帮忙!
提前致谢。
答案 0 :(得分:2)
int row = cellAddress.Start.Row;
int column = cellAddress.Start.Column;
if (mCellsResult.Count() > 0)
{
var mCells = mCellsResult.First();
//if the cell and the merged cell do not share a common start address then skip this cell as it's already been covered by a previous item
if (mCells.Start.Address != cellAddress.Start.Address)
continue;
if (mCells.Start.Column != mCells.End.Column)
{
colSpan += mCells.End.Column - mCells.Start.Column;
}
if (mCells.Start.Row != mCells.End.Row)
{
rowSpan += mCells.End.Row - mCells.Start.Row;
}
}
double height = 0, width = 0;
for (int h = 0; h < rowSpan; h++)
{
height += xlWorkSeet1[k].Row(row + h).Height;
}
for (int w = 0; w < colSpan; w++)
{
width += xlWorkSeet1[k].Column(column + w).Width;
}
double pointToPixel = 0.75;
height /= pointToPixel;
width /= 0.1423;
picture = xlWorkSeet1[k].Drawings.AddPicture(System.Guid.NewGuid().ToString() + row.ToString() + column.ToString(), image);
picture.From.Column = column - 1;
picture.From.Row = row - 1;
picture.SetSize((int)width, (int)height);
答案 1 :(得分:1)
Cell.Top和Cell.Left会很好,但它们在EPPlus中不存在。 我受到Pomster的启发并完成了这个功能:
/// <summary>Get top, left, width and height of a given cell.</summary>
Rectangle GetCellTopLeftCoordinates(ExcelWorksheet worksheet, ExcelRangeBase cell)
{
double top = 0, left = 0, width = 0, height = 0;
//Get top and left position:
for (int i = 1; i < cell.Start.Row; i++)
top += worksheet.Row(i).Height;
for (int i = 1; i < cell.Start.Column; i++)
left += worksheet.Column(i).Width;
//Get width and height:
if (cell.Merge) //Then the cell are merged with others:
{
foreach (string address in worksheet.MergedCells) //Loop through all merged cells:
if (Intersect(worksheet.Cells[address], cell)) //Then we have found the particular, merged range:
{
ExcelRange range = worksheet.SelectedRange[address];
for (int i = range.Start.Row; i <= range.End.Row; i++)
height += worksheet.Row(i).Height;
for (int i = range.Start.Column; i <= range.End.Column; i++)
width += worksheet.Column(i).Width;
break;
}
}
else //No merges - just get dimensions:
{
width = worksheet.Column(cell.Start.Column).Width;
height = worksheet.Row(cell.Start.Row).Height;
}
//Convert point to pixels:
top /= 0.75;
left /= 0.1423;
height /= 0.75;
width /= 0.1423;
return new Rectangle((int)left, (int)top, (int)width, (int)height);
}
bool Intersect(ExcelRange range, ExcelRangeBase cell)
{
foreach (ExcelRangeBase item in range)
if (item.Address == cell.Address)
return true;
return false;
}
答案 2 :(得分:0)
尝试cell.top
和cell.left
,它们存在于Excel对象模型中。
答案 3 :(得分:0)
如何获取excel范围的左上角:
using Excel = Microsoft.Office.Interop.Excel;
...
// get upper left corner of range defined by a RangeStr like "B2:D4"
Excel.Range UpperLeftCell = (Excel.Range)wsheet.get_Range(RangeStr).Cells[1,1];
其中wsheet是一个Worksheet对象。