Как получить элементы DataGridViewComboBoxCell и добавить их в список проверки данных Excel в vb.net - PullRequest
0 голосов
/ 04 марта 2019

В следующем коде я экспортирую DataGridViews в листы Excel.Но некоторые из моих столбцов - это DataGridViewComboBoxCell, в котором есть определенный список элементов для этой ячейки.Я хотел бы определить их и записать в Excel как список проверки данных.

 Public Shared Sub NewMethod(ByVal dgvPa As DataGridView, ByVal dgvHp As DataGridView, ByVal dgvMp As DataGridView, ByVal dgvFe As DataGridView)
        Dim sfd As SaveFileDialog = frmMain.sfdSaveFile
        sfd.Filter = "Excel |*.xlsx"
        sfd.Title = "Save Info Sheet File"
        sfd.ShowDialog()

        If sfd.FileName IsNot "" Then
            Dim xlApp As New Excel.Application
            If xlApp Is Nothing Then
                MessageBox.Show("Excel is not properly installed!")
            Else
                Dim xlBook As Excel.Workbook = xlApp.Workbooks.Add()
                xlBook.SaveAs(sfd.FileName)
                xlBook = xlApp.Workbooks.Open(sfd.FileName)
                Dim xlSheetPa As Excel.Worksheet = CType(xlBook.ActiveSheet, Excel.Worksheet)
                xlSheetPa.Name = My.Settings.str_infosheet__tabname_pa

                For i = 1 To dgvPa.ColumnCount
                    xlSheetPa.Cells(1, i) = dgvPa.Columns(i - 1).HeaderText
                Next

                For i = 0 To dgvPa.ColumnCount - 1
                    For j = 0 To dgvPa.Rows.Count - 1
                        xlSheetPa.Cells(j + 2, i + 1) = dgvPa.Rows(j).Cells(i).Value

    '       Dim xlRng As Excel.Range = CType(xlSheetPa.Cells(j + 2, i + 1), Excel.Range)
                '       With xlRng.Validation
                '           .Add(Type:=Excel.XlDVType.xlValidateList,
                'AlertStyle:=Excel.XlDVAlertStyle.xlValidAlertStop,
                'Operator:=Excel.XlFormatConditionOperator.xlBetween,
                'Formula1:="<items of combobox will listed>")
                '           .IgnoreBlank = True
                '           .InCellDropdown = True
                '       End With
                '       With xlRng
                '           .Value = dgvPa.Rows(j).Cells(i).Value
                '       End With

                    Next
                Next


                xlBook.Save()
                xlBook.Close()
                xlApp.Quit()

                Marshal.ReleaseComObject(xlBook)
                Marshal.ReleaseComObject(xlApp)
                dgvPa.Rows.Clear()
                dgvHp.Rows.Clear()
                dgvMp.Rows.Clear()
                dgvFe.Rows.Clear()


            End If
        End If
    End Sub

Здесь я пытаюсь добавить этот список элементов DataGridViewComboboxCell с кодом ниже:

            '       Dim xlRng As Excel.Range = CType(xlSheetPa.Cells(j + 2, i + 1), Excel.Range)
            '       With xlRng.Validation
            '           .Add(Type:=Excel.XlDVType.xlValidateList,
            'AlertStyle:=Excel.XlDVAlertStyle.xlValidAlertStop,
            'Operator:=Excel.XlFormatConditionOperator.xlBetween,
            'Formula1:="<items of combobox will listed>")
            '           .IgnoreBlank = True
            '           .InCellDropdown = True
            '       End With
            '       With xlRng
            '           .Value = dgvPa.Rows(j).Cells(i).Value
            '       End With

Но моя проблема в том, как я могу получить элементы comboboxcell в виде массива или другого формата?После этого, как можно объединить этот код в следующем разделе.

For i = 0 To dgvPa.ColumnCount - 1
                    For j = 0 To dgvPa.Rows.Count - 1
                        xlSheetPa.Cells(j + 2, i + 1) = dgvPa.Rows(j).Cells(i).Value
                    Next
                Next
...