2016-12-14 25 views
1

新規のEPPlusです。EPPlusを使用してExcelセルの場所を翻訳する

私は、出発点に相対してセルをアドレスしたいと思いますが、これを達成する最良の方法は何ですか?

例えば:今のところ

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

私はEPPlus機能に慣れていないですので、私は、このメソッドを自分で書いた:

/// <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を使用してこの機能を実現する例です。

私は新しいバグの導入を危険にさらす代わりに、実績のある技術を利用できるようにしたいと考えています。

答えて

1

をmmended、私はそれを考えることができる唯一の方法は、「最短」である。このようなものです:

//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)); 

ないクリーンそれの彼らメーカーが翻訳し公開しdidntのため、残念ながらそれを直接使用することはできません。

1

私はあなたに何か助けて欲しいと思っていますが、私はあなたの質問についてはっきりしていません。 しかし、私はあなたのようなものを探していることを願っています。

ここでは、整数行から整数列をExcelアドレスに変換する方法を示します。あなたは、データはExcelワークシート

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; 
     } 
    } 

に戻り、ここでコンバータークラスはExcelの自動化のためのアドレスマッピング

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("^[A-Z]+$"); 
      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用で前後に、

をアドレスを作成する必要があります

そのしかし、まだシンプルでクリアな1つ

私は思いますあなたEPPlus具体的な解決策についてはhttp://spreadsheetlight.com/

+0

ありがとうございました。しかし、私はEPPlusパッケージを使用しようとしています。 –

+0

上記の回答は、EPPLusだけでなく、好きなものにも使用できます。 –

+0

上記の回答はEPPLusだけでなく、あなたが好きなものにも使用できます。 –

関連する問題