Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 2732|回复: 7

[已解决]为什么生成文本文件首行和其它行不对齐?

[复制链接]
发表于 2013-12-10 00:01 | 显示全部楼层 |阅读模式






Sub Click()
    Dim arr
    arr = Range("a1").CurrentRegion
    Call toTxT(arr, "c:\1.txt")
End Sub
'二维数组写入txt
Sub toTxT(arr, Fullpath)
    Dim s() As String, i As Long
    ReDim s(1 To UBound(arr))
    For i = 1 To UBound(arr)
        s(i) = Join(Application.Index(arr, i, 0), " ")
    Next
    Open Fullpath For Output As #1
    Print #1, , Join(s, vbCrLf)
    Close #1
End Sub
1.rar (8.93 KB, 下载次数: 11)
excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
发表于 2013-12-10 04:20 | 显示全部楼层
因为字符串长度不同,直接JOIN可能会出现问题。
楼主试试下面的代码:
  1. Sub test()
  2.     Dim arr, i%, j%
  3.     arr = Range("a1").CurrentRegion
  4.     Open "C:\2.txt" For Output As #1
  5.     For i = 1 To UBound(arr)
  6.         For j = 1 To UBound(arr, 2)
  7.             Print #1, arr(i, j) & Space(20 - LenB(StrConv(arr(i, j), vbFromUnicode)));
  8.         Next
  9.         Print #1,
  10.     Next
  11.     Close #1
  12. End Sub
复制代码
回复

使用道具 举报

发表于 2013-12-10 08:43 | 显示全部楼层    本楼为最佳答案   
把这句
Print #1, , Join(s, vbCrLf)

改成
Print #1, Join(s, vbCrLf)
回复

使用道具 举报

 楼主| 发表于 2013-12-10 09:24 | 显示全部楼层
dongqing1998 发表于 2013-12-10 04:20
因为字符串长度不同,直接JOIN可能会出现问题。
楼主试试下面的代码:

谢谢dongqing1998!


Sub test2()
    Dim arr, i%, j%, x, y
    arr = Range("a1").CurrentRegion
    Open "C:\2.txt" For Output As #1
    For i = 1 To UBound(arr)
        For j = 1 To UBound(arr, 2)

            '>>>
            x = StrConv(arr(i, j), vbFromUnicode)
            y = LenB(x)
            Debug.Print x, y
            '<<<

            Print #1, arr(i, j) & Space(20 - LenB(StrConv(arr(i, j), vbFromUnicode)));
        Next
        Print #1,
    Next
    Close #1
End Sub



常数 值 说明
vbFromUnicode 128 将字符串由Unicode转成系统的缺省码页。

1)我还是不理解 StrConv(字符串, vbFromUnicode) 转换后的特点,一味套用,可否解释下?以理解对本题的帮助
2)本题目的是把二维数组导出为文本文件。Join函数 和 index()工作表函数都是有限制的,所以当数据量足够大时,1楼报错,不知2楼方法吃的消么,有更快办法么?

回复

使用道具 举报

 楼主| 发表于 2013-12-10 09:28 | 显示全部楼层
zjdh 发表于 2013-12-10 08:43
把这句
Print #1, , Join(s, vbCrLf)

谢谢zjdh!

可否说明下,对着语法,为什么你这样改了后就对齐了?
回复

使用道具 举报

 楼主| 发表于 2013-12-10 09:30 | 显示全部楼层
唉,本题已评最佳了,

但问题是我还想知道怎样更快将“二维数组导出为文本文件”,

我再去开贴好了。。。。。
回复

使用道具 举报

发表于 2013-12-10 09:45 | 显示全部楼层
放到单元格,然后将工作簿另存为文本?
回复

使用道具 举报

 楼主| 发表于 2013-12-10 10:06 | 显示全部楼层
Dj_soo 发表于 2013-12-10 09:45
放到单元格,然后将工作簿另存为文本?

http://www.excelpx.com/thread-315160-1-1.html

来这儿吧
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-4-21 00:15 , Processed in 0.426042 second(s), 13 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表