Vbscript 从Excel转换中删除前导零

Vbscript 从Excel转换中删除前导零,vbscript,Vbscript,我有一个VB脚本,它将一个以波浪线分隔的文件转换为Excel 2003版。一切似乎都很好,但发现前导零正从某些字段下降。有没有一种方法可以在脚本中包含一个组件,从而不删除前导零?下面是用于转换以波浪线分隔的文件的脚本。提前谢谢 Const xlDelimited = 1 Const xlWorkbookNormal = -4143 Set objExcel = CreateObject("Excel.Application") objExcel.Visible

我有一个VB脚本,它将一个以波浪线分隔的文件转换为Excel 2003版。一切似乎都很好,但发现前导零正从某些字段下降。有没有一种方法可以在脚本中包含一个组件,从而不删除前导零?下面是用于转换以波浪线分隔的文件的脚本。提前谢谢

    Const xlDelimited  = 1
    Const xlWorkbookNormal = -4143

    Set objExcel = CreateObject("Excel.Application")
    objExcel.Visible = True

    objExcel.Workbooks.OpenText "C:\Scripts\Test.txt", _
    , , xlDelimited, , , , , , , True, "~"

    objExcel.Workbooks("Test.txt").SaveAs _
   "C:\Scripts\Test.xls", xlWorkbookNormal

    objExcel.Workbooks("Test.xls").Close

    objExcel.Quit

在Excel中删除前导0,因为它将任何看起来像数字的东西都存储为数字。如果确实需要显示前导0,则必须欺骗Excel将数字存储为字符串。根据您使用的Excel版本(在我看来,还有行星的排列),您通常可以通过将字段用引号括起来或在字段前面加一个引号来实现这一点。这将诱使Excel将数字存储为文本。例如:

"001234"~"005678"

但根据我的经验,这很少是必要的。如果要对值执行计算,则不需要前导0。如果您正在存储和/或传输数据,Excel无论如何都不太合适-请使用csv或其他平面文件。我能想到的唯一好的理由是,您正在使用Excel为最终用户显示或打印数据,并且您的数据集包含某种数字字符串,如SSN或SKU编号。如果是这样的话,上面的解决方法是我找到的实现它的唯一方法


编辑:应该在顶部说:我认为在你使用的脚本中没有这样做的方法。解决方法包括更改数据文件的生成方式,即;向字段中添加字符。或者,您可以编写一个脚本,逐行、逐字段地读取数据文件,并将字段写入Excel文件,包括换行引号/前导单引号。

前导0在Excel中被删除,因为它将任何看起来像数字的内容存储为数字。如果确实需要显示前导0,则必须欺骗Excel将数字存储为字符串。根据您使用的Excel版本(在我看来,还有行星的排列),您通常可以通过将字段用引号括起来或在字段前面加一个引号来实现这一点。这将诱使Excel将数字存储为文本。例如:

"001234"~"005678"

但根据我的经验,这很少是必要的。如果要对值执行计算,则不需要前导0。如果您正在存储和/或传输数据,Excel无论如何都不太合适-请使用csv或其他平面文件。我能想到的唯一好的理由是,您正在使用Excel为最终用户显示或打印数据,并且您的数据集包含某种数字字符串,如SSN或SKU编号。如果是这样的话,上面的解决方法是我找到的实现它的唯一方法


编辑:应该在顶部说:我认为在你使用的脚本中没有这样做的方法。解决方法包括更改数据文件的生成方式,即;向字段中添加字符。或者,您可以编写一个脚本,逐行、逐字段地读取数据文件,并将字段写入Excel文件,包括换行引号/前导单引号。

您可以使用
FieldInfo
参数强制Excel将数据解释为文本。根据的文档,
FieldInfo
是:

包含解析信息的数组 对于单个数据列。这个 解释取决于信息的价值 数据类型。当数据被分隔时, 这个参数是一个数组 两个元素数组,每个元素 指定 特定项目的转换选项 柱第一个元素是 列编号(以1为基础),以及 第二个元素是 XlColumnDataType常量指定 如何解析列。

如果源数据具有固定宽度 列,每个列中的第一个元素 双元素数组指定 起始字符在中的位置 列(作为整数;字符0) (零)是第一个字符)。这个 两个元素中的第二个元素 数组指定的解析选项 该列显示为介于0和之间的数字 9,如上表所列

稍微修改您的示例:

Option Explicit

Const xlDelimited  = 1
Const xlWorkbookNormal = -4143
Const xlGeneralFormat = 1
Const xlTextFormat = 2

Dim objExcel
Set objExcel = CreateObject("Excel.Application")
objExcel.Visible = True

objExcel.Workbooks.OpenText "C:\Scripts\Test.txt", _
    , , xlDelimited, , , , , , , True, "~", _
    Array(Array(1, xlTextFormat), Array(2, xlTextFormat), Array(3, xlGeneralFormat))

objExcel.Workbooks("Test.txt").SaveAs _
    "C:\Scripts\Test.xls", xlWorkbookNormal

objExcel.Workbooks("Test.xls").Close

objExcel.Quit
这是我使用的
Test.txt

"001234"~"000543"~"000555"

在本例中,前两列被解释为文本(保留前导零),而第三列被解释为数字(Excel通常的做法)。

您可以使用
FieldInfo
参数强制Excel将数据解释为文本。根据的文档,
FieldInfo
是:

包含解析信息的数组 对于单个数据列。这个 解释取决于信息的价值 数据类型。当数据被分隔时, 这个参数是一个数组 两个元素数组,每个元素 指定 特定项目的转换选项 柱第一个元素是 列编号(以1为基础),以及 第二个元素是 XlColumnDataType常量指定 如何解析列。

如果源数据具有固定宽度 列,每个列中的第一个元素 双元素数组指定 起始字符在中的位置 列(作为整数;字符0) (零)是第一个字符)。这个 两个元素中的第二个元素 数组指定的解析选项 该列显示为介于0和之间的数字 9,如上表所列

稍微修改您的示例:

Option Explicit

Const xlDelimited  = 1
Const xlWorkbookNormal = -4143
Const xlGeneralFormat = 1
Const xlTextFormat = 2

Dim objExcel
Set objExcel = CreateObject("Excel.Application")
objExcel.Visible = True

objExcel.Workbooks.OpenText "C:\Scripts\Test.txt", _
    , , xlDelimited, , , , , , , True, "~", _
    Array(Array(1, xlTextFormat), Array(2, xlTextFormat), Array(3, xlGeneralFormat))

objExcel.Workbooks("Test.txt").SaveAs _
    "C:\Scripts\Test.xls", xlWorkbookNormal

objExcel.Workbooks("Test.xls").Close

objExcel.Quit
这是我使用的
Test.txt

"001234"~"000543"~"000555"
在本例中,前两列被解释为文本(保留前导零),而第三列被解释为数字(Excel通常的做法)。

“这很少有必要”。。。除非是需要拨打的电话号码,或者