将Excel中的选定列写入.txt文件

时间:2014-10-29 09:18:14

标签: .net vb.net

我正在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秒。

任何人都可以帮我解决更快的问题吗?

2 个答案:

答案 0 :(得分:0)

您可以将文件另存为CSV格式。 使用文本编辑器程序(或显然是以编程方式)可以轻松编辑结果。 它会为excel文件中的每一行写一个文本行,用';'

分隔列

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

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

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

答案 1 :(得分:0)

我设法以稍微不同的方式解决问题。在此处找到解决方案: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()

这似乎很简单和基本,但也许这段代码可以在将来帮助某人。