Есть ли способ прочитать определенные столбцы каждой строки в Excel? - PullRequest
0 голосов
/ 14 февраля 2019

Прежде всего, я очень плохо знаком с C #.Я хотел бы выбрать каждую строку моего листа Excel и поместить его в текстовом документе.Проблема в том, что мне нужны только определенные столбцы (21 из 70+).

Вот мой код:

Например:

Excel:
 |1  2  3  4  5
1|x  y  c  v  b
2|x  y  c  v  b
3|x  y  c  v  b

И мне нужны все строки от 1 до 3, но только данные из столбца 2,3,5

В моем текстовом документе я хочу, чтобы это понравилось:YCBYCBYCBНо это выглядит так:YYYсссббб

int[] spalten = new int[] { 5, 22, 24, 27, 29, 32, 34, 37, 39, 43, 45, 48, 50, 54, 56, 59, 61, 65, 67, 71, 73 };
for (int x = 0; x <= 20; x++)
{
  //loop all columns 
  for (int j = 4; j <= 74; j++)
  {
    //loop all rows
    for (int i = 5; worksheet.Cells[i, 5].Value != null; i++)
    {
      //add the cell data to the List
      if (j == spalten[x])
     {
         if (worksheet.Cells[i, j].Value == null)
         {
           Console.WriteLine("leer");
           string Inhalt = "leer" + "\t";
           string[] lines = { Inhalt };

           File.AppendAllLines(Path.Combine(docPath, "Daten2.txt"), lines);
        }
      else
      {
       excelData.Add(worksheet.Cells[i, j].Value.ToString());
       Console.WriteLine(worksheet.Cells[i, j].Value);
       string Inhalt = worksheet.Cells[i, j].Value.ToString()+"\t";
       string[] lines = { Inhalt };
       File.AppendAllLines(Path.Combine(docPath, "Daten2.txt"), lines);                                      
      }          
     }
   }

}


 }

1 Ответ

0 голосов
/ 14 февраля 2019

Измените порядок ваших циклов: сначала зацикливайте строки, затем столбцы текущей строки.Внутри внутреннего цикла объедините значения столбцов в одну строку.

Из соображений производительности старайтесь выполнять как можно меньше работы внутри цикла (например, не обращайтесь к worksheet.Cells[] дважды с одинаковыми индексами).Используйте StringBuilder для объединения строк.Вы можете использовать foreach для циклического перебора только сконфигурированных столбцов.

var configuredColumns = new int[] { 5, 22, 24, 27, 29, 32, 34, 37, 39, 43, 45, 48, 50, 54, 56, 59, 61, 65, 67, 71, 73 };   

// loop over all data rows (ignore first 5 rows which are headers)
// stop looping if the current row has no data in column 5
var allRowTexts = new List<string>();
for (int row = 5; worksheet.Cells[row, 5].Value != null; row++) {

    // loop over the configured columns
    var rowText = new StringBuilder();
    foreach (var col in configuredColumns) {

        var cell = worksheet.Cells[row, col];
        if (cell.Value == null) {
            rowText.Append("leer" + "\t");
        }
        else {
            rowText.Append(cell.Value.ToString() + "\t");                
        } 
    }

    // rowText now contains all column values for the current row
    allRowTexts.Add(rowText.ToString());
}

// write all rows into file
File.AppendAllLines(Path.Combine(docPath, "Daten2.txt"), allRowTexts); 

C # Fiddle с использованием фиктивного рабочего листа и вывода на консоль

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