我在Listview中显示了查询后的数据,我想将它输出成excel的文件应该怎么做

解决方案 »

  1.   

    可以创建Excel对象,读取Listview的数据后填充到Excel里
      

  2.   

    Public  Function  dhListviewToExcel(  _  
           ByRef  lvw  As  MSComctlLib.ListView,  _  
           ByVal  strFileName  As  String,  _  
           Optional  FileFormat  As  XlFileFormat  =  xlWorkbookNormal,  _  
           Optional  blnHeaders  As  Boolean  =  True)  As  Boolean  
                 
             
           Dim  intColCnt                                              As  Integer                    '  列之计数器。  
           Dim  intColumns                                            As  Integer                    '  字段数。  
           Dim  intRowCnt                                              As  Integer                    '  栏之计数器。  
           Dim  intStartRow                                          As  Integer                    '  开始列数。  
           Dim  intVisibleColumns()                          As  Integer                    '  表头资料。  
             
           Dim  itm                                                          As  ListItem  
             
           Dim  lngResults                                            As  Long                          '  回传数值。  
             
           Dim  objExcel                                                As  Excel.Application  
           Dim  objWorkbook                                          As  Excel.Workbook  
           Dim  objWorksheet                                        As  Excel.Worksheet  
           Dim  objRange                                                As  Excel.Range  
             
           Dim  strArray()                                            As  String                      '  表身资料。  
           Dim  strFileExtensionType                        As  String                      '  延伸檔名。  
             
           '------------------------------------------------  
           '  A0  侦测作业。  
           '------------------------------------------------  
           '  判断  listview  是否有资料。  
           If  lvw.SelectedItem  Is  Nothing  Then  
                   MsgBox  "表格没有任何资料。",  vbOKOnly  +  vbInformation,  "汇出失败"  
                   GoTo  ExitFunction  
           End  If  
             
           '  询问使用者汇出范围。  
           lngResults  =  MsgBox("只汇出选择列数之资料?",  vbYesNoCancel  +  vbQuestion  +  vbDefaultButton2,  "汇出选择列数")  
             
           If  lngResults  =  vbCancel  Then  
                   GoTo  ExitFunction  
           End  If  
             
           Screen.MousePointer  =  vbHourglass  
             
           '  测试是否本机是否安装  Excel。  
           On  Error  Resume  Next  
           Set  objExcel  =  New  Excel.Application  
             
           If  Err.Number  >  0  Then  
                   MsgBox  "本机未安装  MS  Excel  。",  vbOKOnly  +  vbCritical,  "加载  Excel  失败"  
                   GoTo  ExitFunction  
           End  If  
             
           '------------------------------------------------  
           '  B0  Excel  相关设定作业。  
           '------------------------------------------------  
           On  Error  GoTo  ExportToExcel_EH  
             
           '  不让使用者操作。  
           objExcel.Interactive  =  False  
     
           '  背后作业。  
           If  objExcel.Visible  =  False  Then  
                   objExcel.Visible  =  True  
           End  If  
             
           '  窗口最大化。  
           objExcel.WindowState  =  xlMaximized  
     
           '  设定  Wokkbook  对象。  
           Set  objWorkbook  =  objExcel.Workbooks.Add  
             
           '  设定  Worksheet  对象,指向  Sheet  1。  
           Set  objWorksheet  =  objWorkbook.Sheets(1)  
             
           '  设定  Range  对象,指向  Row  1。  
           Set  objRange  =  objWorksheet.Rows(1)  
             
           '  设定表头字号、粗体。  
           objRange.Font.Size  =  9  
           objRange.Font.Bold  =  True  
             
           '------------------------------------------------  
           '  C0  Excel  表头部份相关设定作业。  
           '------------------------------------------------  
           For  intColCnt  =  1  To  lvw.ColumnHeaders.Count  
                     
                   If  lvw.ColumnHeaders(intColCnt).Width  <>  0  Then  
     
                           intColumns  =  intColumns  +  1  
                             
                           ReDim  Preserve  intVisibleColumns(1  To  intColumns)  
                             
                           intVisibleColumns(intColumns)  =  intColCnt  
                             
                           objRange.Cells(1,  intColumns)  =  lvw.ColumnHeaders(intColCnt).Text  
                             
                           With  objWorksheet.Columns(intColumns)  
                                     
                                   Select  Case  LCase(lvw.ColumnHeaders(intColCnt).Tag)  
                                           Case  "string",  ""  
                                                   .NumberFormat  =  "@"  
                                           Case  "number"  
                                                   .NumberFormat  =  "#,##0.00_);(#,##0.00)"  
                                                   .HorizontalAlignment  =  xlRight  
                                           Case  "date"  
                                                   .NumberFormat  =  "yyyy/mm/dd"  
                                                   .HorizontalAlignment  =  xlRight  
                                   End  Select  
                                     
                           End  With  
                             
                   End  If  
           Next  intColCnt  
             
           '------------------------------------------------  
           '  D0  取得  listview  数据,置入数组。  
           '------------------------------------------------  
           ReDim  strArray(1  To  lvw.ListItems.Count,  1  To  intColumns)  
             
           intStartRow  =  2  
             
           For  Each  itm  In  lvw.ListItems  
                   
                   If  lngResults  =  vbNo  Or  itm.Selected  Then  
                             
                           intRowCnt  =  intRowCnt  +  1  
                             
                           For  intColCnt  =  1  To  intColumns  
                                     
                                   If  intVisibleColumns(intColCnt)  =  1  Then  
                                           strArray(intRowCnt,  1)  =  itm.Text  
                                   Else  
                                           strArray(intRowCnt,  intColCnt)  =  itm.SubItems(intVisibleColumns(intColCnt)  -  1)  
                                   End  If  
                           Next  intColCnt  
                   End  If  
           Next  itm  
     
      

  3.   

    '------------------------------------------------  
           '  E0  数组数据,置入  Excel。  
           '------------------------------------------------  
           With  objWorksheet  
                   .Range(.Cells(2,  1),  .Cells(2  +  intRowCnt  -  1,  intColumns))  =  strArray  
           End  With  
             
           objWorksheet.Columns.AutoFit  
             
           '------------------------------------------------  
           '  F0  取得延伸檔名。  
           '        参阅  Excel  说明里的「Microsoft  Excel  提供的档案格式转换器」  
           '------------------------------------------------  
           Select  Case  FileFormat  
                   Case  xlSYLK  
                           strFileExtensionType  =  "slk"  
                   Case  xlWKS  
                           strFileExtensionType  =  "wks"  
                   Case  xlWK1,  xlWK1ALL,  xlWK1FMT  
                           strFileExtensionType  =  "wk1"  
                   Case  xlCSV,  xlCSVMac,  xlCSVWindows  
                           strFileExtensionType  =  "csv"  
                   Case  xlDBF2,  xlDBF3,  xlDBF4  
                           strFileExtensionType  =  "dbf"  
                   Case  xlWorkbookNormal,  xlExcel2FarEast,  xlExcel3,  xlExcel4,  xlExcel4Workbook,  xlExcel5,  xlExcel7,  xlExcel9795  
                           strFileExtensionType  =  "xls"  
                   Case  xlHtml  
                           strFileExtensionType  =  "htm"  
                   Case  xlTextMac,  xlTextWindows,  xlUnicodeText,  xlCurrentPlatformText  
                           strFileExtensionType  =  "txt"  
                   Case  xlTextPrinter  
                           strFileExtensionType  =  "prn"  
                   Case  Else  
                           strFileExtensionType  =  "dat"  
           End  Select  
     
           '------------------------------------------------  
           '  G0  另存盘案。  
           '------------------------------------------------  
           If  InStr(1,  strFileName,  ".")  =  0  Then  
                     
                   '  组合文件名称。  
                   strFileName  =  strFileName  &  "."  &  strFileExtensionType  
                     
                   '  另存盘案。  
                   objWorksheet.SaveAs  strFileName,  FileFormat  
                     
           End  If  
             
           '------------------------------------------------  
           '  Z0  结束作业。  
           '------------------------------------------------  
           '  关闭  Workbook。  
           objWorkbook.Close  
                                   
           '  结束  Excel  作业。  
           objExcel.Quit  
                         
           '  载出对象变量。  
           Set  objRange  =  Nothing  
           Set  objWorksheet  =  Nothing  
           Set  objWorkbook  =  Nothing  
           Set  objExcel  =  Nothing  
             
           '  此处可以设定是否可以编辑  Excel。  
    '        objExcel.Interactive  =  True  
             
           dhListviewToExcel  =  True  
     
    ExitFunction:  
     
           Screen.MousePointer  =  vbDefault  
             
           Exit  Function  
             
    ExportToExcel_EH:  
     
           '  出现错误讯息。  
           MsgBox  "汇出失败,原因如下:"  &  vbCrLf  &  vbCrLf  &  Err.Number  &  ":  "  &  Err.Description,  _  
                         vbOKOnly  +  vbCritical,  "汇出失败"  
                           
           '  结束  Excel  作业。  
           objExcel.Quit  
                         
           '  载出对象变量。  
           Set  objRange  =  Nothing  
           Set  objWorksheet  =  Nothing  
           Set  objWorkbook  =  Nothing  
           Set  objExcel  =  Nothing  
             
           GoTo  ExitFunction  
             
    End  Function