有没有人有一个Excel VBA函数可以从一个数字返回列字母?
例如,输入100应该返回CV.
什么是最快的c#函数,它接受并返回包含一个或多个字母的字符串,以便在Excel函数中使用?例如,1返回"A",26返回"Z",27返回"AA"等.
这被称为成千上万次,并且需要25%的时间来生成具有许多公式的大型电子表格.
public string Letter(int intCol) {
int intFirstLetter = ((intCol) / 676) + 64;
int intSecondLetter = ((intCol % 676) / 26) + 64;
int intThirdLetter = (intCol % 26) + 65;
char FirstLetter = (intFirstLetter > 64) ? (char)intFirstLetter : ' ';
char SecondLetter = (intSecondLetter > 64) ? (char)intSecondLetter : ' ';
char ThirdLetter = (char)intThirdLetter;
return string.Concat(FirstLetter, SecondLetter, ThirdLetter).Trim();
}
Run Code Online (Sandbox Code Playgroud) 您如何确定Excel中第n列的列名(例如"AQ"或"BH")?
编辑:一种语言无关的算法,以确定这是这里的主要目标.
也许我在数学方面还不够好,但是我在将数字转换为纯字母的Bijective Hexavigesimal方面遇到了问题,就像Microsoft Excel/OpenOffice Calc一样.
这是我的代码的一个版本,但没有给我我需要的输出:
var toHexvg = function(a){
var x='';
var let="_abcdefghijklmnopqrstuvwxyz";
var len=let.length;
var b=a;
var cnt=0;
var y = Array();
do{
a=(a-(a%len))/len;
cnt++;
}while(a!=0)
a=b;
var vnt=0;
do{
b+=Math.pow((len),vnt)*Math.floor(a/Math.pow((len),vnt+1));
vnt++;
}while(vnt!=cnt)
var c=b;
do{
y.unshift( c%len );
c=(c-(c%len))/len;
}while(c!=0)
for(var i in y)x+=let[y[i]];
return x;
}
我努力的最佳结果是:a b c d ... y z ba bb bc- 虽然不是上面的实际代码.预期的输出是a b c ... y z aa ab ac ... zz aaa aab aac ... zzzzz …
我有一个
List<String> MyList=new List<string>();
Run Code Online (Sandbox Code Playgroud)
我需要MyList用n值填充列表.
如果n的值为2,则列表MyList将包含
"A","B"
Run Code Online (Sandbox Code Playgroud)
如果10那么
"A","B","C"....."J"
Run Code Online (Sandbox Code Playgroud)
如果30那么
"A"....."Z","AA","AB",AC","AD"
Run Code Online (Sandbox Code Playgroud)
如果1000那么
"A",....."Z","AA","AB"......"AZ","BA","BB"......."BZ"........"YZ","AAA",AAB".....
and so on
Run Code Online (Sandbox Code Playgroud)
我不知道该怎么做.
请帮助我使用任何方法使用LINQ或执行此操作 LAMBDA Expression
我正在尝试创建一个函数,它将在传递索引时为我提供字母位置.它会像excel显示它的列一样.A ... Z,AA,AB ....我写了下面的函数来得到Z的结果.它看起来像
static string GetColumnName(int index)
{
const int alphabetsCount = 26;
if (index <= alphabetsCount)
{
int code = (index - 1) + (int)'A';
return char.ConvertFromUtf32(code);
}
return string.Empty;
}
Run Code Online (Sandbox Code Playgroud)
这工作正常,直到'Z'.如果我通过1则返回'A',如果我通过2则返回'B',依此类推.但是,当我将27传递给这个函数时,我无法弄清楚如何获得AA.我想我需要一个递归方法来找到它.
对这个问题的任何输入都会很棒!
编辑
这是Tordek建议的.但他的代码将失败,如52,78等数字.为此添加了解决方法,这是最终的工作代码.
static string GetColumnName(int index)
{
const int alphabetsCount = 26;
if (index > alphabetsCount)
{
int mod = index % alphabetsCount;
int columnIndex = index / alphabetsCount;
// if mod is 0 (clearly divisible) we reached end of one combination. Something like AZ …Run Code Online (Sandbox Code Playgroud) 我有以下代码,它没有将值保存到单元格和文件中。它显示了cell.cellvalue字段中的价值,但它没有将其写入excel。我不知道如何保存文件。我使用OpenXml-SDK并将datatable值写入每个cell/row创建的电子表格文档。
using (SpreadsheetDocument ssd=SpreadsheetDocument.Open(Server.MapPath(@"\ExcelPackageTemplate.xlsx"),true))
{
WorkbookPart wbPart = ssd.WorkbookPart;
WorksheetPart worksheetPart = wbPart.WorksheetParts.First();
SheetData sheetdata = worksheetPart.Worksheet.GetFirstChild<SheetData>();
string[] headerColumns = new string[] { dt.Columns[0].ColumnName, dt.Columns[1].ColumnName,dt.Columns[2].ColumnName };
DocumentFormat.OpenXml.Spreadsheet.Row r = new DocumentFormat.OpenXml.Spreadsheet.Row();
int RowIndexer = 1;
//int colInd=0;
r.RowIndex = (UInt32)RowIndexer;
string test = ColumnName(RowIndexer);
foreach (DataColumn dc in dt.Columns)
{
DocumentFormat.OpenXml.Spreadsheet.Cell cell = new DocumentFormat.OpenXml.Spreadsheet.Cell();
cell.CellReference = test+RowIndexer;
cell.DataType = CellValues.InlineString;
cell.InlineString = new InlineString(new Text(dc.ColumnName.ToString()));
DocumentFormat.OpenXml.Spreadsheet.CellValue value = new DocumentFormat.OpenXml.Spreadsheet.CellValue();
r.AppendChild(cell); …Run Code Online (Sandbox Code Playgroud) c# ×4
excel ×4
.net-3.5 ×1
algorithm ×1
alphabet ×1
excel-udf ×1
javascript ×1
lambda ×1
linq ×1
openxml ×1
openxml-sdk ×1
performance ×1
vba ×1