5

Excelにエクスポートするコードがあり、列の配列があります。。

  var colheaders = new string[] {"Name", "Age", "Total", "Date"}

今、私はヘッダーを設定するためにこのようなコードを持っています

            excelExport.SetCell("A", 1, "Name");
            excelExport.SetCell("B", 1, "Age");
            excelExport.SetCell("C", 1, "Total");
            excelExport.SetCell("D", 1, "Date");

問題は、50列あり、最初に1列追加したい場合は、各列「A」、「B」、「C」などの文字を更新する必要があることです。。

私はすでに文字列ヘッダーの配列を持っているので、私はこのようなものが欲しいです:

  foreach (string colheader in colheaders)
  {
     excelExport.SetCell("A", 1, colheader);
  }

しかし、この場合、文字「A」を動的に設定する必要があります。このようなもの:

  int i = 0;
  foreach (string colheader in colheaders)
  {
     excelExport.SetCell(GetCol(i), 1, colheader);
     i++;
  }

ノート:

また、Zの後、AA、AB、ACなどに移動する必要があります。。Excelの列と一致させるため、ロジックは26列を超える必要があります

4

4 に答える 4

5

これは最も洗練されたソリューションではありませんが、探している結果が得られます。

const int maxAlpha = 26;
int charNum;
var timesMaxed = 0;
var counter = 0;
var asciiStartPoint = 65;

foreach (string colheader in colheaders)
{
    var result = String.Empty;

    if (counter == maxAlpha)
    {
        timesMaxed++;
        counter = 0;
    }

    if (timesMaxed > 0)
    {
        charNum = asciiStartPoint + (timesMaxed - 1);
        result += ((char)charNum).ToString();
    }

    charNum = asciiStartPoint + counter;
    result += ((char)charNum).ToString();

    excelExport.SetCell(result, 1, colheader);
    counter++;
}
于 2011-12-28T19:09:55.337 に答える
4

実用的な解決策があるstackoverflowに関する別の質問を見つけることができました:

ここに質問があります:C#でExcelの列文字を生成する最速の関数

答えは次のとおりです。ExcelColumnFromNumber()メソッド

于 2011-12-28T21:14:36.763 に答える
1
    private List<string> GetCol()
    {
        var x = Enumerable.Range(65, 26).Select(p => (char)p).ToList();
        List<string> result = new List<string>();
        foreach (var first in x)
        {
            result.Add(first.ToString());
        }

        foreach (var first in x)
        {
            foreach (var second in x)
            {
                result.Add(first.ToString() + second.ToString());
            }
        }
        return result;
    }
于 2011-12-28T18:49:56.557 に答える
0

の定義によってはSetCell、次のことができる場合があります。

int i = 0; 
foreach (string colheader in colheaders) 
{ 
    excelExport.SetCell(++i, 1, colheader);
} 

これは、たとえば、SetCellが次のように定義されている場合に機能します。

void SetCell(object col, object row, object value)
{
    _excelApp.Cells(row, col).set_Value(value);
}
于 2011-12-28T19:00:58.863 に答える