从字符串变量分配Excel数字格式

时间:2017-12-26 15:49:55

标签: excel vba excel-vba powershell

我使用PowerShell脚本创建Excel工作簿。工作簿包含两个轴的图表。一个轴的数字格式应设置为本地化的自定义日期时间格式。

标准格式是长日期格式的较短版本:

[string]$fmt = "MM/dd hh:mm"

脚本评估自动创建的轴NumberFormat成员,如果NumberFormat已经本地化,则使用不同的字符串:

if ($axis.TickLabels.NumberFormat.Contains("JJJJ")) {
  $fmt = "TT.MM. hh:mm"
}

最后,脚本尝试将字符串分配给轴成员:

 $axis.TickLabels.NumberFormat = $fmt

但是轴对象不接受这种格式。如果我读回了值,我会得到“标准”。

即使此代码也会将数字格式重置为标准格式:

 $fmt = $axis.TickLabels.NumberFormat
 $axis.TickLabels.NumberFormat = $fmt

如何设置自定义日期时间格式?

修改 本地化DE-DE的标准日期时间格式是“TT.MM.JJJJhh:mm”。如果创建了图表,Excel会将其用作默认值。这种格式对DE-DE有效,即使在Excel本地化中也可能是未知的。

2 个答案:

答案 0 :(得分:2)

问题不在于数字格式。

您需要先将轴类型设置为Text,然后才能向其添加日期并在其上应用自定义格式(带时间位)。

这有效:

$chart.Axes(1).CategoryType =2
$axis= $chart.axes(1)
$axis.TickLabels.NumberFormat = "DD.MM. hh:mm"

如果您将Axix类别保留为默认/自动,数字格式不会按预期工作。

$axis= $chart.axes(1)
$axis.TickLabels.NumberFormat = "DD.MM. hh:mm"

您的数字格式中有时间格式,除了散点图之外,没有其他任何内容支持在轴上。所以你需要先改变你的轴类型。

答案 1 :(得分:0)

使用NumberFormatLocal代替NumberFormat来获取/设置本地化格式:

$axis.TickLabels.NumberFormatLocal = $fmt