【问题标题】:How to convert from decimal coordinate (1,1) to Excel Style Coordinate A1 in powershell如何在powershell中从十进制坐标(1,1)转换为Excel样式坐标A1
【发布时间】:2017-04-13 19:35:28
【问题描述】:

我有一个以十进制格式 (1,1) 输出 excel 坐标的 API。我正在尝试从像 (1,1) 这样的 excel 的十进制坐标转换为 excel 中的 A1,因为我有另一个 API,我试图提供只接受经典 excel 样式坐标输入的坐标, A1。

我希望能够从 API (100,45) 获取输出并将其转换为 CW45 以输入到其他 API

我怎样才能做到这一点?

当数字是 BY ITSELF 时,我确实知道如何转换为字母:

function Convert-ToLetters ([parameter(Mandatory=$true,ValueFromPipeline=$true)][int] $value)  {
$currVal = $value;
$returnVal = '';
while ($currVal -ge 26) {
    $returnVal = [char](($currVal) % 26 + 65) + $returnVal;
    $currVal =  [int][math]::Floor($currVal / 26)
}
$returnVal = [char](($currVal) + 64) + $returnVal;

return $returnVal
}

但我不知道如何在 (1,2) 中做第一个数字并忽略第二个数字并将其组合在一起最终成为 A2 而不是 (A,2)

谢谢



感谢@MikeGaruccio 的帮助

最后是

$oldCoordinates = @(1,1)
$newCoordinates = "$(Convert-ToLetters $oldCoordinates[0])$($oldCoordinates[1])"

如果我有一个输入,我已经将它变成了一个像 $boo = (x,y) 这样的变量,其中 x 和 y 代表任何一组数字,而不是字母本身;就这么简单:

$oldCoordinates = @($boo)
$newCoordinates = "$(Convert-ToLetters $oldCoordinates[0])$($oldCoordinates[1])"

【问题讨论】:

  • 所以你这样称呼那个函数:Convert-ToLetters 1.2 ?

标签: excel powershell data-conversion


【解决方案1】:

如果您正在处理列数相对较小且已知的输入文件,则可以使用简单的查找表。

$arr = @{
  A = 1
  B = 2
  C = 3
  (etc)
}

$oldCoordinates = @(1,1)
$newCoordinates = "$($arr[$oldCoordinates[0]])$($oldCoordiantes[1])"

如果您的列数超过 10 列左右,生成 $arr 会有点麻烦,因此这可能不适合大型工作表。

编辑

啊,您处理了最困难的部分,将它们分开非常容易,您只需构建一个字符串并使用您需要的两个值填充它,列的转换字母和现有的行号。将上面的解决方案留作参考,以防有人需要。

$oldCoordinates = @(1,1)
$newCoordinates = "$(Convert-ToLetters $oldCoordinates[0])$($oldCoordinates[1])"

【讨论】:

  • 非常感谢,你真棒
  • 您从第一个 API 得到什么输出?是字符串还是数组?
  • ...它很好...我只是有一个大脑袋...过于复杂的事情非常简单...只需将变量插入正确的位置.....谢谢虽然
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-04-14
  • 1970-01-01
  • 2020-02-15
  • 1970-01-01
  • 1970-01-01
  • 2021-11-27
  • 1970-01-01
相关资源
最近更新 更多