我正在尝试为:
创建一个包装器C#类sheet.Cells[int row, int colmn].Value = "some value";
任何建议还是应该找出其他方法?
提前谢谢。
注释:
澄清,
工作表是Excel工作表。我们有第三方组件来编写excel报告。现在我们需要更新报告,因为此第三方组件已更新。我需要做的是创建一个模仿
sheet.Cell[int row, int colmn].Value = “Some Value”;
我正在寻找本文所述的内容:
http://pietschsoft.com/post/2007/03/17/C-Give-your-object-a-Default-Indexer-Property.aspx
但是,当索引器有两个参数时,它会变得复杂。
这是我提出的解决方案。这可能不是最好的解决方案。但是,我找不到别的办法。
public class SheetClass
{
public SheetWrapper Cells;
public SheetClass(Worksheet _sheet)
{
Cells = new SheetWrapper(_sheet);
}
}
public class SheetWrapper
{
private readonly Worksheet sheet;
public PFCell this[int x, int y]
{
get { return new PFCell(this.sheet, x-1, y-1); }
}
public SheetWrapper(Worksheet sheet)
{
this.sheet = sheet;
}
}
public class PFCell
{
Worksheet ws;
int x;
int y;
public PFCell(Worksheet ws, int x, int y)
{
this.ws = ws;
this.x = x;
this.y = y;
}
public object Value
{
get { return ws.Cells[x,y].Value; }
set { ws.Cells[x,y].Value = value; }
}
}
然后在页面上我可以执行以下操作:
SheetClass sc = new SheetClass(sheet);
sc.Cells[1, 1].Value = "test";
如果有更好的方法可以做到这一点,请告诉我。
答案 0 :(得分:1)
class SheetWrapper
{
private readonly Sheet sheet;
public SheetWrapper(Sheet sheet) { this.sheet = sheet; }
public object this[int row, int column]
{
get { return sheet.Cells[row, column].Value; } // add null checks, etc
set { sheet.Cells[row, column].Value = value; }
}
}
答案 1 :(得分:1)
似乎您试图保持与标准Excel互操作代码完全相同的语法,但使单元格索引从2开始而不是从1开始。我对Excel对象模型了解不多,但看起来这应该可行:
public class SheetClass
{
RangeWrapper cells;
public RangeWrapper Cells { get; }
public SheetClass(Worksheet _sheet)
{
cells = new RangeWrapper(_sheet.Cells);
}
}
public class RangeWrapper
{
private readonly Range cells;
public Cell this[int x, int y]
{
get { return Cells[x-1, y-1]; }
}
public RangeWrapper(Range cells)
{
this.cells = cells;
}
}