Member 13890537 Ответов: 1

Как можно поместить условие в цикл?


Я новичок и самоучка в любом случае

Я планирую экспортировать свои данные из моего datagridview в excel с помощью цикла но то что я хочу это когда когда цикл достигнет заданного состояния другие данные должны быть помещены в другую строку ячеек в excel

вот пример, когда я экспортирую свои данные в excel

   |___A__|___B_____|____C___|__D____|___E___|_________F___________|
_
1     I      want      to      go      out    inside my house
_
2     He     want      to      go      out    From his School
_
3
_
4
_


Но то, что я хочу, это вот так в моем excel

   |___A ____|___B___|___C___|___D_____________|____E____|__F__|
_
1     I        want   
_
2     He       want    
_
3
_
4     to         go      out     inside my house
_
5     to         go      out      From his School
_


вот мой код, Пожалуйста, помогите мне.

Private Sub ExportingEdited()
       If ((DataGridView1.Columns.Count = 0) Or (DataGridView1.Rows.Count = 0)) Then
           Exit Sub
       End If

       Dim columnCollection As DataGridViewColumnCollection = DataGridView1.Columns
       Dim currentVisibleColumn As DataGridViewColumn = columnCollection.GetFirstColumn(DataGridViewElementStates.Visible)
       Dim lastColumnExported As DataGridViewColumn = currentVisibleColumn
       Dim visibleColumnCount As Integer = columnCollection.GetColumnCount(DataGridViewElementStates.Visible)

       Dim xlApp As Microsoft.Office.Interop.Excel.Application
       Dim xlWorkBook As Microsoft.Office.Interop.Excel.Workbook
       Dim xlWorkSheet As Microsoft.Office.Interop.Excel.Worksheet
       Dim misValue As Object = System.Reflection.Missing.Value


       xlApp = New Microsoft.Office.Interop.Excel.Application With {.Visible = True}
       xlWorkBook = xlApp.Workbooks.Add(xlPath)
       xlWorkSheet = CType(xlWorkBook.Sheets("sheet1"), Microsoft.Office.Interop.Excel.Worksheet)

       For r = 0 To DataGridView1.Rows.Count - 1
           'Reset values'
           currentVisibleColumn = columnCollection.GetFirstColumn(DataGridViewElementStates.Visible)
           lastColumnExported = currentVisibleColumn
           For c = 2 To visibleColumnCount + 1
               Dim value = DataGridView1.Rows(r).Cells(currentVisibleColumn.Index).Value
               If value IsNot vbNullString Then
                   xlWorkSheet.Cells(r + 58, c) = value.ToString()
               End If
               currentVisibleColumn = columnCollection.GetNextColumn(lastColumnExported, DataGridViewElementStates.Visible, DataGridViewElementStates.None)
               lastColumnExported = currentVisibleColumn
           Next
       Next

       xlWorkSheet.SaveAs(CType(xlPath, String))
       xlWorkBook.Close()
       xlApp.Quit()

       releaseObject(xlApp)
       releaseObject(xlWorkBook)
       releaseObject(xlWorkSheet)

       Dim p As ProcessStartInfo = New ProcessStartInfo(CType(xlPath, String))
       Process.Start(p)

   End Sub


Что я уже пробовал:

Я попробовал это сделать
Private Sub ExportingEditedspecificrow()
      If ((DataGridView1.Columns.Count = 0) Or (DataGridView1.Rows.Count = 0)) Then
          Exit Sub
      End If

      Dim columnCollection As DataGridViewColumnCollection = DataGridView1.Columns
      Dim currentVisibleColumn As DataGridViewColumn = columnCollection.GetFirstColumn(DataGridViewElementStates.Visible)
      Dim lastColumnExported As DataGridViewColumn = currentVisibleColumn
      Dim visibleColumnCount As Integer = columnCollection.GetColumnCount(DataGridViewElementStates.Visible)

      Dim xlApp As Microsoft.Office.Interop.Excel.Application
      Dim xlWorkBook As Microsoft.Office.Interop.Excel.Workbook
      Dim xlWorkSheet As Microsoft.Office.Interop.Excel.Worksheet
      Dim misValue As Object = System.Reflection.Missing.Value


      xlApp = New Microsoft.Office.Interop.Excel.Application With {.Visible = True}
      xlWorkBook = xlApp.Workbooks.Add(xlPath)
      xlWorkSheet = CType(xlWorkBook.Sheets("sheet2"), Microsoft.Office.Interop.Excel.Worksheet)

      For r = 0 To DataGridView1.Rows.Count - 1
          'Reset values'
          currentVisibleColumn = columnCollection.GetFirstColumn(DataGridViewElementStates.Visible)
          lastColumnExported = currentVisibleColumn
          For c = 2 To visibleColumnCount + 1
              Dim value = DataGridView1.Rows(r).Cells(currentVisibleColumn.Index).Value
              If value IsNot vbNullString Then
                  xlWorkSheet.Cells(r + 58, c) = value.ToString()
                  If c = 7 Then
                      For a = 0 To DataGridView1.Rows.Count - 1
                          'Reset values'
                          currentVisibleColumn = columnCollection.GetFirstColumn(DataGridViewElementStates.Visible)
                          lastColumnExported = currentVisibleColumn
                          For b = 2 To visibleColumnCount + 1
                              value = DataGridView1.Rows(a).Cells(currentVisibleColumn.Index).Value
                              If value IsNot vbNullString Then
                                  xlWorkSheet.Cells(a + 67, b) = value.ToString()
                              End If
                          Next
                      Next
                  End If


              End If
              currentVisibleColumn = columnCollection.GetNextColumn(lastColumnExported, DataGridViewElementStates.Visible, DataGridViewElementStates.None)
              lastColumnExported = currentVisibleColumn
          Next
      Next
      xlWorkSheet.SaveAs(CType(xlPath, String))
      xlWorkBook.Close()
      xlApp.Quit()

      releaseObject(xlApp)
      releaseObject(xlWorkBook)
      releaseObject(xlWorkSheet)

      Dim p As ProcessStartInfo = New ProcessStartInfo(CType(xlPath, String))
      Process.Start(p)

  End Sub


но вот что получилось в результате получилось вот так

  |___A__|___B_____|____C___|__D____|___E___|_________F___________|
_
1     I      want      to      go      out    inside my house
_
2     He     want      to      go      out    From his School
_
3
_
4     I      I        I       I        I        I
_
5     I      I        I       I        I        I
_

Richard MacCutchan

И что же? Что случилось?

Member 13890537

Здравствуйте Мистер Ричард И Доброе Утро
Я уже обновляю этот пост. Пожалуйста, вы можете мне помочь

Richard MacCutchan

Строка 1: Поместите первые два слова первой строки данных.
Строка 2: Поместите первые два слова второй строки данных.
Строка 3: ничего
Строка 4: Поместите последние слова первой строки данных.
Строка 5: Поместите последние слова второй строки данных.

Итак, если номер строки меньше 3, скопируйте слово 1 в столбец 1, а слово 2-в столбец 2.
Если строка равна 3, ничего не делайте
Если строка больше 3, скопируйте слова от 3 до N в Столбцы от 1 до N-2

Member 13890537

Доброе утро и хорошего Вам дня мистер
Спасибо Вам за это, но как я могу это сделать?
можете ли вы привести мне пример кода?

Richard MacCutchan

Не совсем, потому что я не совсем уверен, какую реальную проблему вы пытаетесь решить. Поскольку у вас есть эти данные в DataGridView, они должны поступать из какого-то другого источника, поэтому, возможно, было бы проще отправить их в Excel из исходного источника.

Member 13890537

данные поступают из моего доступа к базе данных, который я создал, а затем данные загружаются в мой datagridview, когда загружается моя форма. затем я создал кнопку, которая будет экспортировать данные из моего datagridview в excel.

Richard MacCutchan

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

1 Ответов

Рейтинг:
2

Dominic Burford

Конечно, было бы лучше получить исходные данные в правильном формате, а затем весь ваш код должен сделать это, чтобы вывести данные в Excel. Возня с данными после факта слишком усложняет ситуацию и подвержена ошибкам.


Member 13890537

Здравствуйте мистер Доминик Берфорд Доброе утро и здоровый день
что вы имеете в виду под правильным форматом?

Dominic Burford

Получите данные в вашем datagridview, чтобы точно воспроизвести, как вы хотите, чтобы данные выглядели после экспорта в Excel. Таким образом, вам не придется манипулировать им в коде.

Member 13890537

Благодарю Вас за ответ Мистер
Будет здорово, если вы сможете привести пример

Так что я могу понять больше и других новичков тоже

Мы будем Вам очень признательны

Заранее благодарю Вас мистер

Dominic Burford

Как вы в настоящее время заполняете свой datagridview? Именно здесь вам нужно внести свои изменения. Заполните это поле, чтобы отразить необходимые выходные данные Excel.

Member 13890537

Я оставлю код здесь мистер

Это о том, как я заполняю свой Datagridview. Как мне сделать эту штуку с зеркалом?
Пожалуйста, наберитесь терпения, Мистер Берфорд, я просто хочу учиться..

Общественные Суб DatagridviewLoad()
Dim dbcommand в виде строки
'Dim dv As New DataView(dt)

dbcommand = "SELECT * FROM EMPLOYEES_DATA"

da = новый OleDbDataAdapter(dbcommand, con)
dt = новый DataTable
да.Заполнить(ДТ)

DataGridView1.Источник данных = ДТ
DataGridView1.Columns(0).Visible = False
DataGridView1.Columns(1).Visible = False
DataGridView1.Columns(2).Visible = False
DataGridView1.Columns(3).Visible = False
Конец Подводной Лодки

Dominic Burford

Я предполагаю, что ваша функция для заполнения datagridview должна выводить свои данные так, чтобы они соответствовали требуемому выходу, необходимому для Excel.

Member 13890537

Я действительно чувствую ваши усилия по ответу на мой вопрос, я оценил это, мистер Берфорд
Теперь я понимаю вашу точку зрения, но я не знаю, как это сделать, есть ли какие-либо ссылки или статьи, которые могут помочь мне сделать это? но будет здорово, если ты ...
Не могли бы вы показать нам, как это сделать, пример, пожалуйста?

Спасибо