【问题标题】:Write selected columns in Excel to .txt file将 Excel 中的选定列写入 .txt 文件
【发布时间】:2014-11-16 19:32:30
【问题描述】:

我正在 Visual Studio 中构建 Excel 加载项,并尝试将用户选择的数据范围写入文本文件。用户可以在 Windows 窗体上选择多个(可以是不连续的)范围。所选范围的地址存储在集合rangesCollection 中。到目前为止,我已经尝试遍历这些范围内的单元格,将单元格写入一个大字符串,最后将字符串写入 .txt 文件:

Dim writefile As New StreamWriter(filePath & "data.txt")
dim sep, text, s as string
sep = ";"
for each ref in rangesCollection
srow = ""
for each cell in Globals.ThisAddIn.Application.ActiveWorkbook.ActiveSheet.range(ref.Text)
srow = srow & cell.text & sep
next cell
s = s & vbCrLf & srow
next ref
writefile.write(s)
writefile.close()

解决方案在稍微大一点的数据集上变得非常慢。例如,写入 3 列数据,每列长度约为 7500 个单元格,大约需要 15 秒。

谁能帮助我更快的解决方案?

【问题讨论】:

    标签: .net vb.net


    【解决方案1】:

    您可以将文件保存为 CSV。 结果很容易用文本编辑器程序编辑(或者显然以编程方式)。 它将为excel文件中的每一行写入一个文本行,用';'分隔列

    示例(列的字母,行的数字):

    A1;B1
    A2;
    A3;B3
    A4;B4
    A5;B5
    ;B6
    

    您可以制作 Excel 文件的临时副本并保持原始文件未编辑,从临时文件中删除未选择的单元格,然后将其另存为 CSV 文件。

    【讨论】:

    • 一有机会我会试一试的。
    【解决方案2】:

    我设法以稍微不同的方式解决了这个问题。在这里找到解决方案:VB.NET/COM Server code way slower than Excel VBA code

    之前的问题是循环访问每个单元格,解决方案是将整个范围写入数组并使用其元素:

    Dim writefile As New StreamWriter(filePath & "data.txt")
    for each ref in rangesCollection
    Dim values(colLength, 1) As Object
    Dim ran As Excel.Range = Globals.ThisAddIn.Application.ActiveWorkbook.ActiveSheet.range(ref.text)
    values = ran.value
    for j=1 to colLength
    writefile.Write(values(j, >1) & ";")
    Next
    writefile.Write(vbCrLf)
    Next
    writefile.close()

    看起来简单而基本,但也许这段代码可以帮助将来的人。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-05
      • 2015-06-12
      相关资源
      最近更新 更多