【问题标题】:Change the system Region/Location setting using vbs使用 vbs 更改系统区域/位置设置
【发布时间】:2015-09-25 09:32:06
【问题描述】:

我想知道是否有人可以帮助解决我的问题。

每周一次,我从我的美国同行那里得到文件,我需要在本地保存到我的机器上,并更改文件的格式。我已经创建了一个可以执行 SaveAs 例程并保存它的 VBScript,但是为了保留美国的日期格式,我必须在程序之前和之后在控制面板中将我的区域设置更改为美国,然后更改为默认本地设置。

我一直在研究这一点,并从 Microsoft 网站获得了一些想法,这些想法展示了如何使用 Set Locale 和 Get locale,但我的代码似乎并没有真正改变任何东西,即使它执行时没有错误。

谁能给我指点...

option explicit
dim currentLocale
currentLocale = GetLocale()

SetLocale 1033       ' 1033 is the EN-US locale

' Revert back to the default system locale
SetLocale currentLocale

【问题讨论】:

  • 除非您在工作簿中存储格式化字符串而不是实际日期时间值,否则 Excel 应使用系统区域设置中定义的格式来显示值。它实际上并没有改变数据的存储方式。为什么你认为你需要这样做?
  • 如果您查看 Excel 中可用的预设日期格式,您会注意到顶部有一对以星号(例如*)作为前缀字符。 “以星号开头的日期格式会响应为操作系统指定的区域日期和时间设置的变化”。
  • @Ansgar Wiechers 基本上发生的情况是,我从美国同行那里得到文件,该文件导出为 excel,但实际文件是 html,因为这需要提供 SQL 服务器导入(再次在美国),我必须对文件进行另存为 .xls,然后将其导入 SQL 服务器。服务器希望日期采用美国格式。由于我在英国,Excel 将日期格式从 mm/dd 更改为 dd/mm。现在多亏了你,我可以运行 vbs 来保存文件,但我希望也能在其中合并系统区域更改。不然用VBS存成xls是没用的。

标签: vbscript regional-settings


【解决方案1】:
Option Explicit

'Define a key registry path
Dim strComputer
Dim objRegistry
Dim strKeyPath
Dim strValueName
Dim getValue
Dim regKeyPath
Dim strLocaleName, strCountry, strshortDateValue, strlongDateValue, strshortTimeValue, strlongTimeValue, strfirstDayOfWeekValue

Const HKEY_CURRENT_USER = &H80000001
strComputer = "."
Set objRegistry = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\default:StdRegProv")
regKeyPath = "Control Panel\International"

strLocaleName = "en-US" 
strCountry = "United States" 
strshortDateValue = "M/d/yyyy"
strlongDateValue = "dddd, MMMM d, yyyy"
strshortTimeValue = "h:mm tt"
strlongTimeValue = "h:mm:ss tt"
strfirstDayOfWeekValue = "6"

objRegistry.SetStringValue HKEY_CURRENT_USER, regKeyPath, "LocaleName", strLocaleName
objRegistry.SetStringValue HKEY_CURRENT_USER, regKeyPath, "sCountry", strCountry
objRegistry.SetStringValue HKEY_CURRENT_USER, regKeyPath, "sShortDate", strshortDateValue
objRegistry.SetStringValue HKEY_CURRENT_USER, regKeyPath, "sLongDate", strlongDateValue
objRegistry.SetStringValue HKEY_CURRENT_USER, regKeyPath, "sShortTime", strshortTimeValue
objRegistry.SetStringValue HKEY_CURRENT_USER, regKeyPath, "sTimeFormat", strlongTimeValue
objRegistry.SetStringValue HKEY_CURRENT_USER, regKeyPath, "iFirstDayOfWeek", strfirstDayOfWeekValue


WScript.Echo "Successfully changed system regional settings."

此脚本将更改您在注册表中的区域设置。谨慎使用。这将更改为 US,因此如果您打算使用此脚本,请确保在更改之前知道默认设置是什么。仅恢复控制面板中的设置是行不通的。

下面的脚本会将所有内容再次更改回英国。

Option Explicit

'Define a key registry path
Dim strComputer
Dim objRegistry
Dim strKeyPath
Dim strValueName
Dim getValue
Dim regKeyPath
Dim strLocaleName, strCountry, strshortDateValue, strlongDateValue, strshortTimeValue, strlongTimeValue, strfirstDayOfWeekValue

Const HKEY_CURRENT_USER = &H80000001
strComputer = "."
Set objRegistry = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\default:StdRegProv")
regKeyPath = "Control Panel\International"

strLocaleName = "en-GB" 
strCountry = "United Kingdom" 
strshortDateValue = "dd/MM/yyyy"
strlongDateValue = "dd MMMM yyyy"
strshortTimeValue = "HH:mm"
strlongTimeValue = "HH:mm:ss"
strfirstDayOfWeekValue = "0"

objRegistry.SetStringValue HKEY_CURRENT_USER, regKeyPath, "LocaleName", strLocaleName
objRegistry.SetStringValue HKEY_CURRENT_USER, regKeyPath, "sCountry", strCountry
objRegistry.SetStringValue HKEY_CURRENT_USER, regKeyPath, "sShortDate", strshortDateValue
objRegistry.SetStringValue HKEY_CURRENT_USER, regKeyPath, "sLongDate", strlongDateValue
objRegistry.SetStringValue HKEY_CURRENT_USER, regKeyPath, "sShortTime", strshortTimeValue
objRegistry.SetStringValue HKEY_CURRENT_USER, regKeyPath, "sTimeFormat", strlongTimeValue
objRegistry.SetStringValue HKEY_CURRENT_USER, regKeyPath, "iFirstDayOfWeek", strfirstDayOfWeekValue


WScript.Echo "Successfully changed system regional settings."

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-05-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多