Office中国论坛/Access中国论坛

标题: [原创]导出文本,实现向左、居中、向右对齐 [打印本页]

作者: andymark    时间: 2006-5-17 00:28
标题: [原创]导出文本,实现向左、居中、向右对齐
用Access本身的工具,导出的效果始终不尽人意。要实现向右居中,定位是关键


下面的例子只提供一种思路,欢迎大家有更好的想法互相交流

[attach]17812[/attach]




[attach]17811[/attach]


[此贴子已经被作者于2006-5-16 23:08:50编辑过]


作者: zxzx2733    时间: 2006-5-17 00:29
kk
作者: accessNew001    时间: 2006-5-17 00:30
了么色额
作者: accessNew001    时间: 2006-5-17 00:34
感觉导出来的东西好乱
作者: andymark    时间: 2006-5-17 00:39
以下是引用accessNew001在2006-5-16 16:34:00的发言:
感觉导出来的东西好乱

上面是效果图,你的导出怎样的,还有打开文本最大化看看

[此贴子已经被作者于2006-5-16 16:41:15编辑过]


作者: K仔    时间: 2006-5-17 00:57
看看技术贴
作者: accessNew001    时间: 2006-5-17 02:47
我导出怎么不是这样 ! 你多大的分辨 ? 我最大化还是那样

我的是1024*768
作者: yangxiang    时间: 2006-6-3 23:02
TXT文件怎样实现这样的效果,请举例,多谢!想学!

试过版主的例子,金额字段不向右对齐?

[此贴子已经被作者于2006-6-3 15:07:20编辑过]


作者: andymark    时间: 2006-6-3 23:33
以下是引用yangxiang在2006-6-3 15:02:00的发言:


TXT文件怎样实现这样的效果,请举例,多谢!想学!

试过版主的例子,金额字段不向右对齐?



       好奇怪,在自已的电脑上运行好好的,到别的电脑就不行,你截个图上来,我找找原因
作者: 海狸先生    时间: 2006-6-5 01:45
稍稍改了一下 金额带千分位 的代码


Private Sub Command5_Click()
Dim Rs As New ADODB.Recordset
Dim Str As String
Dim Len1 As Integer
Dim Len2 As Integer
Dim Len3 As Integer
Dim Len4 As Integer

Rs.Open "select trim(身份证号),trim(姓名),工资 from Sheet2", CurrentProject.Connection, adOpenDynamic, adLockOptimistic
' 打开输出文件
Open CurrentProject.Path & "\" & "test.txt" For Output As #1
Print #1, "-----------------------------------------------------------------------"
Print #1, Space(6) & "向左对齐" & Space(15) & "中间对齐" & Space(20) & "向右对齐"     '打印表头
Print #1, "------------------------------------------------------------------------"   '打印表头
Print #1, Space(6) & "身份证号" & Space(15) & "姓    名" & Space(20) & "金    额"         '打印表头
Print #1, "-----------------------------------------------------------------------"

Do While Not Rs.EOF

    Len1 = LenB(StrConv(Rs(1), vbFromUnicode))
    Len2 = Len((Format(Rs(2), "#,###.00")))

    Len3 = 10 - (Len1 - 8) \ 2
    Len4 = 28 - Len2 + 18 - Len3 - Len1

    Str = Rs(0) & Space(Len3) & Rs(1) & Space(Len4) & Format(Rs(2), "#,###.00")

    Print #1, Str   ' 将数据写入文件。
    Rs.MoveNext
Loop

Close #1    ' 关闭文件
Rs.Close
Call ShellExecute(hwnd, "Open", "test.txt", "", CurrentProject.Path, 1)
End Sub

[此贴子已经被作者于2006-6-4 19:02:14编辑过]


作者: 海狸先生    时间: 2006-6-5 15:56
进行简化

Private Sub Command5_Click()
Dim Rs As New ADODB.Recordset
Dim Len1 As Integer, Len2 As Integer, Len3 As Integer

Rs.Open "Select Trim(身份证号),Trim(姓名),Format(工资,'#,###.00') From Sheet2", CurrentProject.Connection, adOpenDynamic, adLockOptimistic

Open CurrentProject.Path & "\" & "test.txt" For Output As #1 ' 打开输出文件

Print #1, "-----------------------------------------------------------------------"
Print #1, Space(6) & "向左对齐" & Space(5 + 10) & "中间对齐" & Space(20) & "向右对齐"  '打印表头
Print #1, "------------------------------------------------------------------------"   '打印表头
Print #1, Space(6) & "身份证号" & Space(5 + 10) & "姓    名" & Space(20) & "金    额"  '打印表头
Print #1, "-----------------------------------------------------------------------"

Do While Not Rs.EOF
   Len1 = LenB(StrConv(Rs(1), vbFromUnicode))
   Len2 = 10 - (Len1 - 8) \ 2    '姓名长度不等于4时,要进行+-处理
   Len3 = 28 - Len(Rs(2)) + 18 - Len2 - Len1
   Print #1, Rs(0) & Space(Len2) & Rs(1) & Space(Len3) & Rs(2)   ' 将数据写入文件。
   Rs.MoveNext
Loop

Close #1    ' 关闭文件
Rs.Close
Call ShellExecute(hwnd, "Open", "test.txt", "", CurrentProject.Path, 1)

End Sub
作者: yangxiang    时间: 2006-6-5 17:23
海狸先生,可以右对齐,,但身份证有的15位有的19位时有问题,工资字段不能右对齐?和

怎样导出文件到不同的盘?

[此贴子已经被作者于2006-6-5 12:33:18编辑过]


作者: yangxiang    时间: 2006-6-5 21:21
海狸先生,我改了这样(身份证号和姓名向左靠,工资向右靠),看看有什么问题?还有我想问在表设计设置了字段长度是20时,输入汉字和数字都是20个,不是一个汉字等于2个数字的长度?是不是access的问题?

怎样有选择地把txt文件导出到其它盘?

'金额不带千分位

Private Sub Command4_Click()
Dim Rs As New ADODB.Recordset
Dim Len1 As Integer, Len2 As Integer, Len3 As Integer

Const Fieldsize1 = 20  '定义字段固定长度 身份证号
Const Fieldsize2 = 20  '定义字段固定长度 姓名
Const Fieldsize3 = 14  '定义字段固定长度 工资

Rs.Open "Select Trim(身份证号),Trim(姓名),Format(工资,'####.00') From Sheet2", CurrentProject.Connection, adOpenDynamic, adLockOptimistic

Open CurrentProject.Path & "\" & "test.txt" For Output As #1 ' 打开输出文件

'Print #1, "-----------------------------------------------------------------------"
'Print #1, Space(6) & "向左对齐" & Space(5 + 10) & "中间对齐" & Space(20) & "向右对齐"  '打印表头
'Print #1, "------------------------------------------------------------------------"   '打印表头
'Print #1, Space(6) & "身份证号" & Space(5 + 10) & "姓    名" & Space(20) & "金    额"  '打印表头
'Print #1, "-----------------------------------------------------------------------"

Do While Not Rs.EOF
   Len1 = LenB(StrConv(Rs(1), vbFromUnicode)) '姓名长度
   Len2 = LenB(StrConv(Rs(0), vbFromUnicode))    '身份证号
     Len3 = LenB(StrConv(Rs(2), vbFromUnicode)) '工资
   
   Print #1, Rs(0) & Space(Fieldsize1 - Len2) & Rs(1) & Space(Fieldsize2 - Len1) & Space(Fieldsize3 - Len3) & Rs(2) ' 将数据写入文件。
       Rs.MoveNext
Loop

Close #1    ' 关闭文件
Rs.Close
Call ShellExecute(hwnd, "Open", "test.txt", "", CurrentProject.Path, 1)

End Sub

[此贴子已经被作者于2006-6-5 13:28:43编辑过]


作者: andymark    时间: 2006-6-5 21:40
怎样有选择地把txt文件导出到其它盘?

   把下面这句改成相应的盘符

    Open CurrentProject.Path & "\" & "test.txt" For Output As #1 ' 打开输出文件
作者: yangxiang    时间: 2006-6-5 22:16
经测试,为何字段有空记录的时候会报错?
作者: andymark    时间: 2006-6-5 22:17
以下是引用yangxiang在2006-6-5 14:16:00的发言:
经测试,为何字段有空记录的时候会报错?

     你把测试的例子传上来看看
作者: yangxiang    时间: 2006-6-5 22:19
以下是引用andymark在2006-6-5 13:40:00的发言:




怎样有选择地把txt文件导出到其它盘?

   把下面这句改成相应的盘符


    Open CurrentProject.Path & "\" & "test.txt" For Output As #1 ' 打开输出文件

改那里?[attach]18277[/attach]


[此贴子已经被作者于2006-6-5 14:20:58编辑过]


作者: 海狸先生    时间: 2006-6-5 22:30
以下是引用yangxiang在2006-6-5 9:23:00的发言:


海狸先生,可以右对齐,,但身份证有的15位有的19位时有问题,工资字段不能右对齐?和

Do While Not Rs.EOF
   Len1 = LenB(StrConv(Rs(1), vbFromUnicode))
   Len2 = 29 - Len(Rs(0)) - (Len1 - 8) \ 2 '身份证号不等于19位或姓名长度不等于4时,要进行+-处理
   Len3 = 36 - Len(Rs(2)) + (Len1 - 8) \ 2 - Len1
   Print #1, Rs(0) & Space(Len2) & Rs(1) & Space(Len3) & Rs(2)   ' 将数据写入文件。
   Rs.MoveNext
Loop
作者: yangxiang    时间: 2006-6-6 00:22
以下是引用海狸先生在2006-6-5 14:30:00的发言:



Do While Not Rs.EOF
   Len1 = LenB(StrConv(Rs(1), vbFromUnicode))
   Len2 = 29 - Len(Rs(0)) - (Len1 - 8) \ 2 '身份证号不等于19位或姓名长度不等于4时,要进行+-处理
   Len3 = 36 - Len(Rs(2)) + (Len1 - 8) \ 2 - Len1
   Print #1, Rs(0) & Space(Len2) & Rs(1) & Space(Len3) & Rs(2)   ' 将数据写入文件。
   Rs.MoveNext
Loop

经测试,字段没有内容的时候报错?

[此贴子已经被作者于2006-6-5 16:30:03编辑过]


作者: andymark    时间: 2006-6-6 00:58
以下是引用yangxiang在2006-6-5 14:19:00的发言:



改那里?

  存到E盘:

  Open "e:\" & "test.txt" For Output As #1



还有这只是提供一个导出文本左右对齐的思路,并不是公式,不能拿来就用


作者: 海狸先生    时间: 2006-6-6 04:12
以下是引用yangxiang在2006-6-5 16:22:00的发言:



经测试,字段没有内容的时候报错?

改一下 Len1 = LenB(StrConv(Nz(Rs(1)), vbFromUnicode))



我晕,你要把字段 没有内容做什么?


作者: zxc55166333    时间: 2006-6-6 05:10
谢谢楼主拉
作者: zxc55166333    时间: 2006-6-6 05:10
谢谢楼主拉
作者: yangxiang    时间: 2006-6-6 22:29
多谢以上各位指导.
作者: xiaojunnan    时间: 2006-9-26 22:42
标题: 感谢老天终于找到了!!
多谢楼主
作者: xiaojunnan    时间: 2006-9-26 22:44
标题: 再次感谢
我顶一万下。。
作者: xiaojunnan    时间: 2006-9-26 22:53
麻烦问个愚笨得问题!!

这个东西的代码用啥能看见!!

你们都用什么开发?我也遇到这样的问题,写入数据列对不齐!!发愁中!!还望指点!!
作者: xiaojunnan    时间: 2006-9-26 22:56
有没有用JAVA编的这个功能的代码!!

不胜感激!!!   我真的好像知道!!




欢迎光临 Office中国论坛/Access中国论坛 (http://www.office-cn.net/) Powered by Discuz! X3.3