Как заполнить ComboBox из столбца Excel - PullRequest
0 голосов
/ 04 июля 2018

После многих часов исследований и отсутствия ответов я хотел бы попросить некоторую помощь по этому вопросу.

В настоящее время я кодирую форму в VB.NET, которая может копировать вставленные строки из файла Excel в недавно созданный файл Excel, в зависимости от того, что в качестве критерия выступает несколько comboBox (каждый comboxBox представляет столбец в Excel).

В настоящее время программа имеет 2 формы:

Первая форма предназначена для просмотра и открытия файла Excel.

2-я форма предназначена для копирования / прохождения данных в новом файле Excel в зависимости от поля со списком.

Я не смог найти, что делать с comboBox , но все же вот что я сделал до сих пор:

1-ая форма

Public Class Form1
Public excel As Microsoft.Office.Interop.Excel.Application

Private Sub Browse1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Browse1.Click
    ofd.Filter = "Excel Files(.xls)|*.xls|Excel Files(.xlsx)|*.xlsx|Excel Files(*.xlsm)|*.xlsm"
    If (ofd.ShowDialog() = DialogResult.OK) Then
        TextBox1.Text = ofd.FileName
    End If
End Sub

Private Sub Comfirm1_Click(sender As Object, e As EventArgs) Handles Comfirm1.Click
    Dim excel As New Microsoft.Office.Interop.Excel.Application
    Dim wb As Microsoft.Office.Interop.Excel.Workbook
    Dim FinderForm As New Form2
    If TextBox1.Text = "" Then
        MessageBox.Show("Wait!", "Please pick your file first!", MessageBoxButtons.OKCancel)
    Else
        wb = excel.Workbooks.Open(TextBox1.Text)
        excel.Visible = False
        wb.Activate()
        FinderForm.Show()
        Me.Hide()
    End If

End Sub
End Class

2-я форма

Public Class Form2
Public excel As Microsoft.Office.Interop.Excel.Application

Private Sub BBack_Click(sender As Object, e As EventArgs) Handles BBack.Click
    Dim FinderFile As New Form1
    excel.Quit()
    FinderFile.Show()
    Me.Close()
End Sub

Private Sub ComboBox1_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ComboBox1.SelectedIndexChanged

End Sub
End Class

Заранее спасибо за любую помощь! Скажите, если вам нужен файл проекта.

Редактировать

Вот мой прогресс:

1-я форма

Imports Microsoft.Office.Interop.Excel

Public Class Form1
Public Property ExcelApp As Application
Public Property ExcelWorkBook As Workbook

Private Sub Browse1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Browse1.Click
    ofd.Filter = "Excel Files(.xls)|*.xls|Excel Files(.xlsx)|*.xlsx|Excel Files(*.xlsm)|*.xlsm"
    If (ofd.ShowDialog() = DialogResult.OK) Then
        TextBox1.Text = ofd.FileName
    End If
End Sub

Private Sub Comfirm1_Click(sender As Object, e As EventArgs) Handles Comfirm1.Click
    If TextBox1.Text = "" Then
        MessageBox.Show("Wait!", "Please pick your file first!", MessageBoxButtons.OKCancel)
    Else
        ExcelApp = New Application
        ExcelWorkBook = ExcelApp.Workbooks.Open(TextBox1.Text)
        ExcelApp.Visible = False
        ExcelWorkBook.Activate()
        Dim FinderForm As New Form2(ExcelApp)
        FinderForm.Show()
        Me.Hide()
    End If
End Sub
End Class

2-я форма

Imports Microsoft.Office.Interop.Excel

Public Class Form2
Property ExcelApp As Application
Property ExcelWorkBook As Workbook

Sub New(ByRef App As Application)
    InitializeComponent()
    ExcelApp = App
End Sub

Private Sub BBack_Click(sender As Object, e As EventArgs) Handles BBack.Click
    ExcelApp.Quit()
    System.Runtime.InteropServices.Marshal.ReleaseComObject(ExcelApp)
    ExcelApp = Nothing
    Form1.Show()
    Me.Close()
End Sub

Private Function GetDataFromExcelByCom(ByVal Optional hasTitle As Boolean = False) As DataTable
    Dim sheets As ExcelApp.Sheets
    Dim oMissiong As Object = System.Reflection.Missing.Value
    Dim workbook As ExcelWorkbook = Nothing
    Dim dt As DataTable = New DataTable()

    Try
        If ExcelApp Is Nothing Then Return Nothing
        workbook = ExcelApp.Workbooks.Open(excelFilePath, oMissiong, oMissiong, oMissiong, oMissiong, oMissiong, oMissiong, oMissiong, oMissiong, oMissiong, oMissiong, oMissiong, oMissiong, oMissiong, oMissiong)
        sheets = workbook.Worksheets
        Dim worksheet As ExcelApp.Worksheet = sheets(1)
        Dim ji As Integer = CType(12, Integer)
        If worksheet Is Nothing Then Return Nothing
        Dim iRowCount As Integer = worksheet.UsedRange.Rows.Count
        Dim iColCount As Integer = worksheet.UsedRange.Columns.Count

        For i As Integer = 0 To iColCount - 1
            Dim name = "column" & i

            If hasTitle Then
                Dim txt = (CType(worksheet.Cells(1, i + 1), ExcelApp.Range)).Text.ToString()
                If Not String.IsNullOrWhiteSpace(txt) Then name = txt
            End If

            While dt.Columns.Contains(name)
                name = name & "_1"
            End While

            dt.Columns.Add(New DataColumn(name, GetType(String)))
        Next

        Dim range As ExcelApp.Range
        Dim rowIdx As Integer = If(hasTitle, 2, 1)

        For iRow As Integer = rowIdx To iRowCount
            Dim dr As DataRow = dt.NewRow()

            For iCol As Integer = 1 To iColCount
                range = CType(worksheet.Cells(iRow, iCol), ExcelApp.Range)
                dr(iCol - 1) = If((range.Value2 Is Nothing), "", range.Text.ToString())
            Next

            dt.Rows.Add(dr)
        Next

        Return dt
    Catch
        Return Nothing
    Finally
        workbook.Close(False, oMissiong, oMissiong)
        System.Runtime.InteropServices.Marshal.ReleaseComObject(workbook)
        workbook = Nothing
        ExcelWorkBook.Close()
        ExcelWorkBook = Nothing
    End Try
End Function

Private Sub ComboBox1_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ComboBox1.SelectedIndexChanged


End Sub
Private Sub ComboBox2_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ComboBox2.SelectedIndexChanged

End Sub
Private Sub ComboBox3_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ComboBox3.SelectedIndexChanged

End Sub
Private Sub ComboBox4_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ComboBox4.SelectedIndexChanged

End Sub
Private Sub ComboBox5_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ComboBox5.SelectedIndexChanged

End Sub
Private Sub ComboBox6_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ComboBox6.SelectedIndexChanged

End Sub

End Class

Я думаю, что это решит проблему множественного превосходства.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...