使用EPPlus来转换Excel单元格的位置

我是使用EPPlus的新手 。

我想要一个单元格,相对于一个起点,实现这个目标的最好方法是什么?

例如:

var startLocation = "C5"; var newLocation1 = TLoc(startLocation, 2, 3); //E8 var newLocation2 = TLoc(startLocation, 0, 1); //C6 

现在我自己写了这个方法,因为我不熟悉EPPlus的function:

 /// <summary> /// Use EPPlus to translate the Location. /// </summary> /// <param name="startLocation"></param> /// <param name="columns"></param> /// <param name="rows"></param> /// <returns></returns> private string TLoc(string startLocation, int columns, int rows) { using (ExcelPackage tmpPack = new ExcelPackage()) { var tmpWs = tmpPack.Workbook.Worksheets.Add("temp"); var startCell = tmpWs.Cells[startLocation]; int startColumn = startCell.Start.Column; int startRow = startCell.Start.Row; int tColumn = startColumn + columns; int tRow = startRow + rows; ExcelAddress translatedAddress = new ExcelAddress(tRow, tColumn, tRow, tColumn); return translatedAddress.ToString(); } } 

请给我一个例子或者链接到文档。 谢谢!

更具体地说:使用EPPlus来实现这个function的例子。

我喜欢在可用的时候使用成熟的技术,而不是冒着引入新的错误的风险。

对于EPPlus特定的解决scheme,我能想到的唯一方法是“最短”就是这样的:

 //Prints "E8" Console.WriteLine(ExcelCellBase.TranslateFromR1C1(ExcelCellBase.TranslateToR1C1("C5", -3, -2), 0, 0)); //Prints "C8" Console.WriteLine(ExcelCellBase.TranslateFromR1C1(ExcelCellBase.TranslateToR1C1("C5", -1, 0), 0, 0)); 

不是最干净的,但是因为他们的制造者没有公开翻译这两种方法的翻译function,所以我们不能直接使用它。

我希望这可以帮助你,我不清楚你的问题。 但是我希望你能find像这样的东西。

这里是将整数行转换为整数列到Excel地址的解决scheme。

它的数据返回到Excel工作表之前和之后,您需要创build地址

  public class ExcelAddress { public readonly string LabelCell; public readonly string ColumnAddress; public readonly int ColumnAddressNumber; public readonly int RowAddressNumber; public readonly string RowAddress; public readonly string CellAddress; // this will give you address public ExcelAddress(int colNum, int rowNum, string Label) { ColumnAddressNumber = colNum; ColumnAddress = ExcelCellAddressConvertor.FromIntegerIndexToColumnLetter(ColumnAddressNumber); RowAddressNumber = rowNum; RowAddress = RowAddressNumber.ToString(); LabelCell = Label; CellAddress = ColumnAddress + RowAddress; } } 

这里是转换器类的地址映射

 using System; using System.Text.RegularExpressions; namespace BLABLA { public static class ExcelCellAddressConvertor { public static string FromIntegerIndexToColumnLetter(int intCol) { var intFirstLetter = ((intCol) / 676) + 64; var intSecondLetter = ((intCol % 676) / 26) + 64; var intThirdLetter = (intCol % 26) + 65; var firstLetter = (intFirstLetter > 64) ? (char)intFirstLetter : ' '; var secondLetter = (intSecondLetter > 64) ? (char)intSecondLetter : ' '; var thirdLetter = (char)intThirdLetter; return string.Concat(firstLetter, secondLetter, thirdLetter).Trim(); } public static int ConvertColumnNameToNumber(string columnName) { var alpha = new Regex("^[AZ]+$"); if (!alpha.IsMatch(columnName)) throw new ArgumentException(); char[] colLetters = columnName.ToCharArray(); Array.Reverse(colLetters); var convertedValue = 0; for (int i = 0; i < colLetters.Length; i++) { char letter = colLetters[i]; // ASCII 'A' = 65 int current = i == 0 ? letter - 65 : letter - 64; convertedValue += current * (int)Math.Pow(26, i); } return convertedValue; } } } 

EEPLUS GOOD API用于Excel自动化,

但还是简单明了的一个

我会build议你http://spreadsheetlight.com/