Member 13950471 Ответов: 2

Как найти следующую пустую строку в excel и экспортировать в нее данные?


В настоящее время я могу экспортировать каждое текстовое поле в отдельную ячейку в строке 2. Однако он может записывать только в то место, которое перезаписывает предыдущие данные. Я пытаюсь понять, как заставить его идентифицировать следующую доступную пустую строку после каждой отправки. Ниже приведен мой текущий код, который записывается только в строку 2.

Microsoft.Office.Interop.Excel.Worksheet xlWorkSheet;
       Microsoft.Office.Interop.Excel.Sheets xlBigSheet;

       object misValue;
       String myPath;
       private void Button1_Click(object sender, EventArgs e)
       {

           string myPath = @"C:\\Users\\N0m4d\\Desktop\\Longhouse\\database.xlsx"; // this must be full path.
           FileInfo fi = new FileInfo(myPath);
           if (!fi.Exists)
           {
               Console.Out.WriteLine("file doesn't exists!");
           }
           else
           {
               var excelApp = new Microsoft.Office.Interop.Excel.Application();
               var workbook = excelApp.Workbooks.Open(myPath);
               Worksheet worksheet = workbook.ActiveSheet as Worksheet;


               Range range1 = worksheet.Cells[2, 1] as Range;
               range1.Value2 = textBox1.Text;
               Range range2 = worksheet.Cells[2, 2] as Range;
               range2.Value2 = textBox2.Text;
               Range range3 = worksheet.Cells[2, 3] as Range;
               range3.Value2 = textBox3.Text;
               Range range4 = worksheet.Cells[2, 4] as Range;
               range4.Value2 = textBox4.Text;
               Range range5 = worksheet.Cells[2, 5] as Range;
               range5.Value2 = textBox5.Text;
               Range range6 = worksheet.Cells[2, 6] as Range;
               range6.Value2 = textBox6.Text;

               excelApp.Visible = true;
               workbook.Save();
               //workbook.Close();

               textBox1.Text = string.Empty;
               textBox2.Text = string.Empty;
               textBox3.Text = string.Empty;
               textBox4.Text = string.Empty;
               textBox5.Text = string.Empty;
               textBox6.Text = string.Empty;

               xlWorkSheet = (Microsoft.Office.Interop.Excel.Worksheet)xlBigSheet.get_Item("Sheet1");
               Microsoft.Office.Interop.Excel.Range last = xlWorkSheet.Cells.SpecialCells(Microsoft.Office.Interop.Excel.XlCellType.xlCellTypeLastCell, Type.Missing);
               int lastUsedRow = last.Row;
               getData(lastUsedRow + 1);
           }
       }

       private void getData(int lastRow_)
       {

           lastRow_ = xlWorkSheet.Cells.Find(
                       "*",
                       xlWorkSheet.Cells[1, 1],
                       misValue,
                       Microsoft.Office.Interop.Excel.XlLookAt.xlPart,
                       Microsoft.Office.Interop.Excel.XlSearchOrder.xlByRows,
                       Microsoft.Office.Interop.Excel.XlSearchDirection.xlPrevious,
                       misValue,
                       misValue,
                       misValue).Row + 1;
       }


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

Пробовал несколько предложений от google, но я не совсем понимаю, как изменить их в соответствии с моими потребностями.

2 Ответов

Рейтинг:
2

Gerry Schmitz

Добавление данных в существующий файл Excel с помощью C# - Stack Overflow[^]

Цитата:
xlWorkSheet = (Microsoft.Офис.Взаимодействие.Превосходить.Рабочий лист)xlBigSheet.get_Item("Лист1");
Microsoft.Офис.Взаимодействие.Превосходить.Диапазон last = xlWorkSheet.Ячейки.Специальные Ячейки(Microsoft.Офис.Взаимодействие.Превосходить.XlCellType.xlCellTypeLastCell, Type.Missing);
int lastUsedRow = последняя строка;
getData(lastUsedRow + 1);


Member 13950471

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

Рейтинг:
0

Patrice T

В vba я использую

RowS = worksheet.UsedRange.RowS.Count
ColS = worksheet.UsedRange.Columns.Count

Interop должен предложить что-то очень похожее.