Ajuste de los datos de salida en varias columnas en un listbox

Tengo los resultados que necesitaba del control de Listview. Ahora me gustaría exportar los datos a un archivo/excel de texto y luego cargarlo de nuevo al control listview cuando sea necesario. Sé cómo hacer ambas tareas usando el control de listbox pero listview es nuevo para mí. He estado investigando y jugando con código durante horas pero sigo recibiendo un error o el otro. A continuación encontrará la última versión de mi código para exportar datos. Además, si pudiera proporcionar código para importar, eso sería super.

'Export the listview to an Excel spreadsheet

 Dim SaveFileDialog1 As New SaveFileDialog
 SaveFileDialog1.Title = "Save Excel File"
 SaveFileDialog1.Filter = "Excel files (*.xls)|*.xls|Excel Files 
 (*.xlsx)|*.xslx"
 SaveFileDialog1.ShowDialog()

    'exit if no file selected
  If SaveFileDialog1.FileName = "" Then
   Exit Sub
  End If

   'create objects to interface to Excel
 Dim xls As New Excel.Application
 Dim book As Excel.Workbook
 Dim sheet As Excel.Worksheet
 Dim placeholder As String

 'create a workbook and get reference to first worksheet
 xls.Workbooks.Add()
 book = xls.ActiveWorkbook
 sheet = book.ActiveSheet

 'step through rows and columns and copy data to worksheet

    Dim row As Integer = 1
    Dim col As Integer = 1

    For Each item As ListViewItem In lstViewUsers.Items
        For i As Integer = 0 To item.SubItems.Count - 1
            placeholder = sheet.Cells(row, col) = item.SubItems(i).Text
            col = col + 1
        Next
        row += 1
        col = 1
    Next

    'save the workbook and clean up

    book.SaveAs(SaveFileDialog1.FileName)
    xls.Workbooks.Close()
    xls.Quit()



End Sub

Pregunta hecha hace 3 años, 4 meses, 11 días - Por bitcraftsman


2 Respuestas:

  • El código que proporcionaste es casi correcto, pero tiene un pequeño error en la forma en que se asigna el valor del texto al rango de celdas en Excel. En lugar de utilizar el operador de asignación "=" dentro de la variable "placeholder", simplemente asigna el valor directamente a la celda. Aquí te dejo el código corregido:

    vb
    'Export the listview to an Excel spreadsheet
    Dim SaveFileDialog1 As New SaveFileDialog
    SaveFileDialog1.Title = "Save Excel File"
    SaveFileDialog1.Filter = "Excel files (.xls)|.xls|Excel Files (.xlsx)|.xslx"
    SaveFileDialog1.ShowDialog()
    
    'exit if no file selected
    If SaveFileDialog1.FileName = "" Then
        Exit Sub
    End If
    
    'create objects to interface to Excel
    Dim xls As New Excel.Application
    Dim book As Excel.Workbook
    Dim sheet As Excel.Worksheet
    Dim placeholder As String
    
    'create a workbook and get reference to first worksheet
    xls.Workbooks.Add()
    book = xls.ActiveWorkbook
    sheet = book.ActiveSheet
    
    'step through rows and columns and copy data to worksheet
    Dim row As Integer = 1
    Dim col As Integer = 1
    
    For Each item As ListViewItem In lstViewUsers.Items
        For i As Integer = 0 To item.SubItems.Count - 1
            sheet.Cells(row, col) = item.SubItems(i).Text
            col = col + 1
        Next
        row += 1
        col = 1
    Next
    
    'save the workbook and clean up
    book.SaveAs(SaveFileDialog1.FileName)
    xls.Workbooks.Close()
    xls.Quit()
    

    Con respecto a la importación de datos desde un archivo Excel de vuelta al ListView, podrías usar un enfoque similar al de la exportación pero invirtiendo el proceso. Puede leer los datos de cada celda en Excel y luego agregarlos como elementos y subítems en el ListView. Aquí tienes un ejemplo básico para leer un archivo Excel y cargar los datos en un ListView:

    vb
    Dim xls As New Excel.Application
    Dim book As Excel.Workbook
    Dim sheet As Excel.Worksheet
    
    ' Open the Excel file
    book = xls.Workbooks.Open("Ruta al archivo Excel")
    
    ' Assume the data starts from row 1 and column 1
    Dim row As Integer = 1
    Dim col As Integer = 1
    
    Do
        Dim item As New ListViewItem
        item.Text = sheet.Cells(row, col).Value
        For i As Integer = 2 To sheet.Columns.Count
            item.SubItems.Add(sheet.Cells(row, i).Value)
        Next
        lstViewUsers.Items.Add(item)
    
        row += 1
    Loop Until sheet.Cells(row, 1).Value Is Nothing
    
    ' Clean up
    book.Close()
    xls.Quit()
    

    Recuerda ajustar la ruta al archivo Excel en la línea xls.Workbooks.Open("Ruta al archivo Excel") según la ubicación de tu archivo. También puede ser necesario adaptar este código a tus necesidades específicas, pero espero que te dé una idea de cómo importar los datos de un archivo Excel al ListView.

    Respondida el Dec 20, 2020 a las 07:31 - por Gpt

    Votos positivos: 0 | Votos negativos: 0

  • Problemas potenciales en el código de exportación:

    Falta de ajuste de columnas: El código no ajusta el ancho de las columnas en el archivo de Excel para adaptarse al texto. Falta de ajuste de filas: El código no ajusta el alto de las filas en el archivo de Excel para adaptarse al texto. Errores al exportar datos con saltos de línea: Si los datos contienen saltos de línea, pueden causar errores o datos truncados en el archivo de Excel.

    Código actualizado con ajustes de columna y fila:

    
    ' Ajustar el ancho de las columnas y el alto de las filas
    
    For Each col As Excel.Range In sheet.Columns
        col.AutoFit()
    Next
    
    For Each row As Excel.Range In sheet.Rows
        row.AutoFit()
    Next
    

    Código para importar datos de un archivo de Excel:

    
    'Import the data from an Excel spreadsheet
    
    Dim OpenFileDialog1 As New OpenFileDialog
    OpenFileDialog1.Title = "Open Excel File"
    OpenFileDialog1.Filter = "Excel files (.xls)|.xls|Excel Files 
     (.xlsx)|.xslx"
    OpenFileDialog1.ShowDialog()
    
    If OpenFileDialog1.FileName = "" Then Exit Sub
    
    'create objects to interface to Excel
    Dim xls As New Excel.Application
    Dim book As Excel.Workbook
    Dim sheet As Excel.Worksheet
    
    'open the workbook and get reference to first worksheet
    xls.Workbooks.Open(OpenFileDialog1.FileName)
    book = xls.ActiveWorkbook
    sheet = book.ActiveSheet
    
    'step through rows and columns and load data to listview
    
    Dim row As Integer = 1
    Dim col As Integer = 1
    
    lstViewUsers.ListItems.Clear()
    Do While sheet.Cells(row, col).Value <> ""
        Dim item As New ListViewItem
        Do While sheet.Cells(row, col).Value <> ""
            item.SubItems.Add(sheet.Cells(row, col).Value)
            col += 1
        Loop
        lstViewUsers.Items.Add(item)
        row += 1
        col = 1
    Loop
    
    'clean up
    xls.Workbooks.Close()
    xls.Quit()
    

    Nota:* Asegúrate de que las referencias a la biblioteca de objetos de Microsoft Excel estén configuradas en tu proyecto.

    Respondida el Dec 20, 2020 a las 07:40 - por Gemini

    Votos positivos: 0 | Votos negativos: 0