【问题标题】:Copying lines from Wordpad into Excel using VBA使用 VBA 将行从写字板复制到 Excel
【发布时间】:2015-06-01 00:29:33
【问题描述】:

我正在编写一些代码,我在 TMX(一种 xml 形式)下导入一些文件。 我尝试了各种选择

a) 使用 Open FileName For 输入,但这会弄乱字符编码

b) 打开文件并使用 msoDialog 复制数据,但如果文件太大(通常是这种情况)会返回错误,这会使数据完全混乱。

c) 使用记事本打开文件,但在将整个文件复制到 Excel 中的限制与上一个选项相同。 我没有尝试使用 shell 函数调用写字板。

我现在的问题是我需要逐行复制文件以根据我的需要处理其内容(希望不会丢失字符编码

有人知道如何从写字板中打开的文件中复制每一行并将其粘贴到 Excel 中吗?

谢谢

【问题讨论】:

  • 可能重复:Excel 中的富文本格式(带有格式标记)到无格式文本 (stackoverflow.com/questions/1673025/…)。最好的问候,
  • 您是否使用来自外部源的数据选项卡并选择 XML。你想要 XML 而不是 RTF/写字板吗?您是否尝试过在 Word 中打开它?我自己会在 .NET 中使用 XMLDocument 或 XMLNode 对象。
  • 不,这不是那个问题的重复。这个问题是关于输出的,我的问题是关于输入以及如何从写字板中逐行选择。
  • 使用数据选项卡和 xml 不起作用,因为这是 xml 的一种特殊形式。 (我已经试过了)
  • 我用Word试过了,但是对于这种类型的文件,Word会提示:错误,DTD被禁止。记事本是有限的,所以我真的需要使用写字板,一次复制和粘贴 1 行。我只是不知道如何使用 VBA 在写字板中逐行选择

标签: excel copy-paste wordpad vba


【解决方案1】:

对于大文件,您可以使用此解决方案:

Public Sub ImportTMXtoExcel()

Call Application.FileDialog(msoFileDialogOpen).Filters.Clear
Call Application.FileDialog(msoFileDialogOpen).Filters.Add("TMX Files", "*.tmx")
Application.FileDialog(msoFileDialogOpen).Title = "Select a file to import..."
Application.FileDialog(msoFileDialogOpen).AllowMultiSelect = False
intChoice = Application.FileDialog(msoFileDialogOpen).Show
If intChoice <> 0 Then
    strFileToImport = Application.FileDialog(msoFileDialogOpen).SelectedItems(1)
Else
    Exit Sub
End If

intPointer = FreeFile()
Open strFileToImport For Input Access Read Lock Read As #intPointer

intCounter = 0
Do Until EOF(intPointer)
    Line Input #intPointer, strLine
    intCounter = intCounter + 1
    Worksheets(1).Cells(intCounter + 1, 1).Value2 = strLine
Loop

Close intPointer

End Sub

对于其他编码,您可以使用 ADO 的 Stream,如该解决方案中所述: VB6/VBScript change file encoding to ansi

如果您有需要 ADO 流的大文件,那么您可能需要考虑首先分解大文件,如本解决方案中所述: How to split a large text file into smaller files with equal number of lines?

以下网站提供了一个在命令提示符下模拟 Windows 的 Unix 命令拆分的工具:https://www.fourmilab.ch/splits/

【讨论】:

  • 谢谢拉尔夫,但这并不能解决问题。字符编码仍然混乱。我希望“访问读取锁”能解决问题,但唉,没有。 :-(
  • @user4384294:在我看来,您需要结合一些解决方案才能到达那里。不幸的是,没有简单的解决方案,因为 Excel 在处理不同的编码方面并不是很强大。我有同样的问题。但现在我正在使用 ansi 获取所有大于 10MB 的文件。
  • 谢谢拉尔夫。是的,我必须结合使我的任务非常复杂的解决方案。我现在需要一个解决方案来在打开文件之前识别文件的大小
  • 对于文件大小,您可能需要查看此解决方案:stackoverflow.com/questions/15883237/…
  • 谢谢拉尔夫,这太完美了。更多的编码,但值得。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-02-08
  • 2015-06-12
  • 1970-01-01
  • 2016-11-02
相关资源
最近更新 更多