从Excel转换中删除前导零

时间:2011-06-17 21:12:31

标签: vbscript

我有一个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

2 个答案:

答案 0 :(得分:3)

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

  

包含解析信息的数组   对于各个数据列。该   解释取决于价值   数据类型。当数据分隔时,   这个参数是一个数组   两个元素的数组,每个都有   两元素数组指定   特定的转换选项   柱。第一个元素是   列号(从1开始),和   第二个元素是其中之一   XlColumnDataType常量指定   如何解析列   ...
  如果源数据具有固定宽度   列,每个中的第一个元素   两元素数组指定   起始角色的位置   列(作为整数;字符0   (零)是第一个字符)。该   两元素中的第二个元素   array指定解析选项   列为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正常工作的方式)。

答案 1 :(得分:1)

领先的0在Excel中被删除,因为它存储了一个看起来像数字的数字。如果你真的需要显示前导0,你必须欺骗Excel将数字存储为一串字符。根据您正在使用的Excel版本(在我看来,行星的对齐),您通常可以通过将字段包装在引号中或在字段前加上单引号来实现此目的。这应该欺骗Excel将数字存储为文本。例如:

"001234"~"005678"

'001234~'005678

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

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