【问题标题】:VBA: from array to csv, keep long numbers as textVBA:从数组到csv,将长数字保留为文本
【发布时间】:2019-01-05 13:48:55
【问题描述】:

我正在尝试使用以下代码将数组直接导出到 csv 文件:Create CSV from array in VBA

该数组包含我需要保存为文本的大量数字,但与往常一样,Excel 会强制对数据使用科学记数法。

我有一些通常可以保留长文本格式的技巧,但它们在这里不起作用。

我在这里尝试过修补:

   For n = 1 To UBound(MyArray(), 1)
    sCSV = ""
    For M = 1 To UBound(MyArray(), 2)
      sCSV = sCSV & Format(MyArray(n, M)) & sDelimiter
    Next M
    sCSV = Left(sCSV, Len(sCSV) - 1) 'remove last Delimiter
    Print #7, sCSV
  Next n

使用

sCSV = sCSV & "'" & Format(MyArray(n, M)) & sDelimiter

sCSV = sCSV & cstr(Format(MyArray(n, M))) & sDelimiter

sCSV = sCSV & Format(MyArray(n, M), "General") & sDelimiter

但他们都没有想要的结果

MyArray 中的值都有正确的格式。

任何建议

是的,Excel/VBA 通常不是处理大量数据的正确工具。在这种情况下,我受到预定义的工作流程的约束,这些工作流程偶尔会涉及使用工作表,所以恐怕没有办法解决这个问题......

【问题讨论】:

  • 参考this
  • 试试 sCSV = sCSV & chr$(34) & Format(MyArray(n, M)) & chr$(34) & sDelimiter
  • 嗨。 Dy Lee 一个 Freeflow。我感谢帮助。不幸的是,它并没有改变任何东西。它只是将截断的值放在引号中。
  • 那么问题可能出在Format的使用上。尝试用 cstr(以及 chr$(34))替换格式。 Format 是一个相当繁重的函数,用于将数字简单转换为字符串。
  • sCSV = sCSV & CStr(MyArray(n, M)) & sDelimiter 成功了。谢谢你:)

标签: arrays excel vba csv


【解决方案1】:

感谢 Freeflow,我找到了解决方案。 VBA 被过度设计。切出格式并使用

sCSV = sCSV & MyArray(n, M) & sDelimiter

反而起作用了。甚至不需要 cstr()

【讨论】:

    【解决方案2】:

    你需要这样的 Format 函数:

    Format(MyArray(n, M),"#")
    

    这会强制结果字符串中只包含数字。如果你有小数,那么“#.#”将适应它;但是,句点 (".") 将始终出现在输出中,即使没有小数。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-22
      • 2021-09-13
      • 2017-08-02
      • 2021-06-19
      • 2021-08-25
      • 2016-08-25
      相关资源
      最近更新 更多