在c#中循环遍历字母表并输出到Excel的最佳方法是什么?
本文关键字:Excel 最佳 方法 是什么 输出 循环 遍历 字母表 | 更新日期: 2023-09-27 18:19:08
我有代码,导出到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列,我想在开始时添加一个,我必须去更新每个列中的字母"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列
这不是最优雅的解决方案,但它确实产生了您想要的结果。
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++;
}
我在stackoverflow上找到了另一个有工作解决方案的问题:
在c#中生成Excel列字母的最快函数,答案是:ExcelColumnFromNumber()方法
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;
}
根据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);
}