导出的excel只有12列居中是怎么回事?

狼二羊 2017-09-25 11:11:34
导出的excel只有12列居中是怎么回事?第13列就不居中了
Dim strFName As String

strFName = Tname & "wncinfo.xls"

Dim xlsApp As New Microsoft.Office.Interop.Excel.Application

Dim xlsBook As Microsoft.Office.Interop.Excel.Workbook

Dim xlsSheet As New Microsoft.Office.Interop.Excel.Worksheet

Try

xlsApp = CreateObject("Excel.Application") '生成Excel

xlsBook = xlsApp.Workbooks.Add

xlsSheet = xlsBook.Worksheets(1)


Dim i As Integer
Dim k As Integer


Dim S() As String


For i = 0 To ListBox3.Items.Count - 1 '行数

For k = 0 To ListBox3.Items.Count - 1

S = Split(ListBox3.Items(k), ",")

Dim j As Integer
For j = 0 To UBound(S) - 1


xlsSheet.Cells(k + 1, j + 1) = Trim(S(j))
xlsSheet.Columns(k + 1).HorizontalAlignment = 3 '居中


Next j

Next k
Next i

MsgBox("数据已经成功导出到:" & strFName & "", MsgBoxStyle.OkOnly, "温馨提示")

xlsBook.SaveAs(strFName) '保存上面生成excel

xlsSheet = Nothing '释放资源

xlsBook.Close() '关闭工作簿

xlsBook = Nothing '释放资源

xlsApp.Quit() '退出excel应用程序

xlsApp = Nothing


Catch ex As Exception
MsgBox(ex.Message)
End Try
...全文
1114 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
狼二羊 2017-10-09
  • 打赏
  • 举报
回复
引用 8 楼 Chen8013 的回复:
[quote=引用 7 楼 qq_30519247 的回复:] [quote=引用 6 楼 Chen8013 的回复:] 1. 建议你在你的代码第31行那儿,设置一个断点。   看看你的那个数组S究竟有多少元素,它就决定了后面的那个For循环设置了多少列居中。 2. 你的代码第38行,其实根本就不应该放在那儿!   设置“列居中”只需要操作一次就行了。   你放在变量j的For循环中,有多少行就对每列设置了多少次“居中”操作,完全是浪费资源…………   因此就是在“第32行”那个地方,插入一个For循环,按输出数据有多少列,把相应的列居中就行了。   (其实可以按“列数”计算出列范围,一句“列范围居中”的操作就行,不用循环)
我好像是因为一共有十二行,所以就居中了十二列。。。。。。那您说的按列数计算居中怎么写。。。。[/quote] 哈哈,对了,你的代码第38行,应该是 j+1 ,却写成 k+1去了。 至于按列数居中,就是要先计算出“最后一列”的字母编号。 比如列数是 u ,最后一列 sCol的算法就是:
If (u > 26) Then  ' 注意 u 是列的“数量”,不是数组下标的上界值
   u = u - 1
   sCol = Chr$(64 + u \ 26) & Chr$(65 + u Mod 26)
Else
   sCol = Chr$(64 + u)
End If
然后,执行这一句应该就可以了:
xlsSheet.Range("A:" & sCol).HorizontalAlignment = 3
[/quote] 感谢感谢 大神就是厉害!
舉杯邀明月 2017-09-27
  • 打赏
  • 举报
回复
引用 7 楼 qq_30519247 的回复:
[quote=引用 6 楼 Chen8013 的回复:] 1. 建议你在你的代码第31行那儿,设置一个断点。   看看你的那个数组S究竟有多少元素,它就决定了后面的那个For循环设置了多少列居中。 2. 你的代码第38行,其实根本就不应该放在那儿!   设置“列居中”只需要操作一次就行了。   你放在变量j的For循环中,有多少行就对每列设置了多少次“居中”操作,完全是浪费资源…………   因此就是在“第32行”那个地方,插入一个For循环,按输出数据有多少列,把相应的列居中就行了。   (其实可以按“列数”计算出列范围,一句“列范围居中”的操作就行,不用循环)
我好像是因为一共有十二行,所以就居中了十二列。。。。。。那您说的按列数计算居中怎么写。。。。[/quote] 哈哈,对了,你的代码第38行,应该是 j+1 ,却写成 k+1去了。 至于按列数居中,就是要先计算出“最后一列”的字母编号。 比如列数是 u ,最后一列 sCol的算法就是:
If (u > 26) Then  ' 注意 u 是列的“数量”,不是数组下标的上界值
   u = u - 1
   sCol = Chr$(64 + u \ 26) & Chr$(65 + u Mod 26)
Else
   sCol = Chr$(64 + u)
End If
然后,执行这一句应该就可以了:
xlsSheet.Range("A:" & sCol).HorizontalAlignment = 3
狼二羊 2017-09-27
  • 打赏
  • 举报
回复
引用 6 楼 Chen8013 的回复:
1. 建议你在你的代码第31行那儿,设置一个断点。   看看你的那个数组S究竟有多少元素,它就决定了后面的那个For循环设置了多少列居中。 2. 你的代码第38行,其实根本就不应该放在那儿!   设置“列居中”只需要操作一次就行了。   你放在变量j的For循环中,有多少行就对每列设置了多少次“居中”操作,完全是浪费资源…………   因此就是在“第32行”那个地方,插入一个For循环,按输出数据有多少列,把相应的列居中就行了。   (其实可以按“列数”计算出列范围,一句“列范围居中”的操作就行,不用循环)
我好像是因为一共有十二行,所以就居中了十二列。。。。。。那您说的按列数计算居中怎么写。。。。
狼二羊 2017-09-26
  • 打赏
  • 举报
回复
没人会么...........
舉杯邀明月 2017-09-26
  • 打赏
  • 举报
回复
1. 建议你在你的代码第31行那儿,设置一个断点。   看看你的那个数组S究竟有多少元素,它就决定了后面的那个For循环设置了多少列居中。 2. 你的代码第38行,其实根本就不应该放在那儿!   设置“列居中”只需要操作一次就行了。   你放在变量j的For循环中,有多少行就对每列设置了多少次“居中”操作,完全是浪费资源…………   因此就是在“第32行”那个地方,插入一个For循环,按输出数据有多少列,把相应的列居中就行了。   (其实可以按“列数”计算出列范围,一句“列范围居中”的操作就行,不用循环)
赵4老师 2017-09-25
  • 打赏
  • 举报
回复
在Excel中开始记录宏,手动完成所需功能,结束记录宏,按Alt+F11键,查看刚才记录的宏对应的VBA代码。
狼二羊 2017-09-25
  • 打赏
  • 举报
回复
这是图

狼二羊 2017-09-25
  • 打赏
  • 举报
回复
Dim strFName As String

        strFName = Tname & "wncinfo.xls"

        Dim xlsApp As New Microsoft.Office.Interop.Excel.Application

        Dim xlsBook As Microsoft.Office.Interop.Excel.Workbook

        Dim xlsSheet As New Microsoft.Office.Interop.Excel.Worksheet

        Try

            xlsApp = CreateObject("Excel.Application")  '生成Excel

            xlsBook = xlsApp.Workbooks.Add

            xlsSheet = xlsBook.Worksheets(1)


            Dim i As Integer
            Dim k As Integer


            Dim S() As String


            For i = 0 To ListBox3.Items.Count - 1 '行数

                For k = 0 To ListBox3.Items.Count - 1

                    S = Split(ListBox3.Items(k), ",")

                    Dim j As Integer
                    For j = 0 To UBound(S) - 1


                        xlsSheet.Cells(k + 1, j + 1) = Trim(S(j))
                        xlsSheet.Columns(k + 1).HorizontalAlignment = 3 '居中


                    Next j

                Next k
            Next i

            MsgBox("数据已经成功导出到:" & strFName & "", MsgBoxStyle.OkOnly, "温馨提示")

            xlsBook.SaveAs(strFName)  '保存上面生成excel

            xlsSheet = Nothing  '释放资源 

            xlsBook.Close()  '关闭工作簿 

            xlsBook = Nothing  '释放资源

            xlsApp.Quit()  '退出excel应用程序 

            xlsApp = Nothing


        Catch ex As Exception
            MsgBox(ex.Message)
        End Try
狼二羊 2017-09-25
  • 打赏
  • 举报
回复
有大神么!111111111111

2,462

社区成员

发帖
与我相关
我的任务
社区描述
VBA(Visual Basic for Applications)是Visual Basic的一种宏语言,是在其桌面应用程序中执行通用的自动化(OLE)任务的编程语言。
社区管理员
  • VBA
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧