Задать формат ячеек Excel при выводе данных из DataGridView

bd_13

Необходимо сделать текстовый формат всех ячеек в эксле перед выводом данных в него. Данные в эксель выводятся из DataGridView данные выводятся так: (код помог написать RoyDenzel):
 Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        Const sPath As String = "C:\11\test.xlsx"
        Dim sArr(3, 0) As String
        Dim i As Integer, j As Integer, k As Integer, iCount As Integer
        Dim iNum As Integer
        Dim sTmpArr(Me.DataGridView1.Rows.Count - 2) As Integer
 
        Dim oExcel As Object 'MSExcel
        Dim oBook As Object 'Книга MSExcel
        Dim oSheet As Object 'Лист книга MSExcel
 
        oExcel = CreateObject("Excel.Application")
        oBook = oExcel.Workbooks.Add
        oExcel.Visible = True
 
        For i = 0 To UBound(sTmpArr) 'собираем все значения (№) в одномерный массив
            sTmpArr(i) = Me.DataGridView1.Item(3, i).Value
        Next i
 
        Array.Sort(sTmpArr) 'сортируем массив 
 
        For i = 0 To UBound(sTmpArr)
            ReDim sArr(3, 0)
            iCount = 0
            If iNum <> sTmpArr(i) Then
                iNum = sTmpArr(i)
                Try 'если пустого листа нет, создаем его
                    oSheet = oBook.Worksheets(iNum)
                Catch ex As Exception
                    oSheet = oBook.Worksheets.Add
                End Try
                For j = 0 To Me.DataGridView1.Rows.Count - 2 'цикл по строкам
                    If iNum = Me.DataGridView1.Item(3, j).Value Then
                        ReDim Preserve sArr(3, iCount)
                        For k = 0 To 3 'цикл по столбцам
                            sArr(k, iCount) = Me.DataGridView1.Item(k, j).Value.ToString 'сбор данных в двумерный массив результатов
                        Next k
                        iCount += 1
                    End If
                Next j                
                oSheet.Range("A1").Resize(iCount, 4).Value = oExcel.Transpose(sArr) 'транспонирование массива
                oSheet.Name = iNum.ToString 'изменения имени листа
            Else
                Continue For
            End If
        Next i
 
        If IO.File.Exists(sPath) Then 'проверяем существет ли уже файл, если да, то пытаемся его удалить
            Try
                IO.File.Delete(sPath)
            Catch ex As Exception
                MsgBox("Невозможно удалить файл " & sPath & ", ошибка: " & ex.Message, MsgBoxStyle.Critical, "Ошибка")
            End Try
        End If
 
        Try 'пытаемся сохранить файл
            oBook.SaveAs(sPath)
        Catch ex As Exception
            MsgBox("Невозможно сохранить файл " & sPath & ", ошибка: " & ex.Message, MsgBoxStyle.Critical, "Ошибка")
        End Try
        oSheet = Nothing
        oBook = Nothing
        oExcel = Nothing
    End Sub
6 ответов

bd_13

Текстовый формат ячейки в Excel = "@" вроде, если правильно помнится мне...


bd_13

Yury Komar, да, это я знаю, что формат ячейки в Экселе обозначается "@" знаю, как на vba сделать... а как мне это всё через vb.net - хз...


bd_13

bd_13, у меня есть пример. Делал так, но увы сейчас не могу показать. От компа далеко... Могу только совет дать, запустите запись макроса в екселе и посмотрите как ОН это делает, ну и результат под себя заточите.


bd_13

По-идее, между 31 и 32 строками написать:
oSheet.Cells.NumberFormat = "@"
после этого все ячейки листа будут иметь текстовый формат. Если нужен конктретно какой-то диапазон ячеек, то
oSheet.Range("A1:Z100").NumberFormat = "@"


bd_13

То что под рукой было. Задает формат колонок.
XlSht.Columns(2).NumberFormat = "@"
где XlSht - объект Листа


bd_13

Pavel55, Sklifosofsky, да да, именно так bd_13, ну а чтоб сменить формат колонки по ее букве, то вроде так:
oSheet.Range("A:A").NumberFormat = "@"