Как узнать, имеет ли фактическая ячейка верхнюю границу в - PullRequest
1 голос
/ 10 марта 2020

Мне нужно проверить на листе, есть ли в каждой ячейке BORDER TOP любого типа и пуста ли ячейка

Это то, что я сделал до сих пор ...

Microsoft.Office.Interop.Excel.Application excel = new Microsoft.Office.Interop.Excel.Application();

Microsoft.Office.Interop.Excel.Workbook workbook = excel.Workbooks.Open(original_file_path + file_name + xls);

//Work on sheet number 2
Microsoft.Office.Interop.Excel.Worksheet x = workbook.Worksheets[2];

INT MAX_ROW = usedRange.Rows.Count;
INT MAX_COL = usedRange.Columns.Count;

for (int row = 1; row <= MAX_ROW; row++)
{
 for (int col = 1; col <= MAX_COL; col++)
 {
//The following line is pseudocode since i have no idea how to use border property. This checks if the given cell is empty and if the border top is null
   if(x.Cells[row,col].Borders.topBorder == false && x.Cells[row,col].Value == null)
   {
   //The thing that i want to do with this is replace that cell value to the one located on Cells [row -1, col]
     x.Cells[row,col].value = x.Cells[row -1, col].value;
   }else {
   Console.WriteLine("nothing to do here");
   }

 }
}

1 Ответ

0 голосов
/ 12 марта 2020

Вот быстрый метод, который вы можете адаптировать по своему вкусу, который должен дать вам логику c, в которой вы нуждаетесь ... фактически, я просто смотрю на стиль линии верхней границы ячейки. Если это «нет», то другие свойства на самом деле не имеют значения.

Вы были на правильном пути, но Borders является индексатором, и вы задаете ему соответствующую границу и оцениваете свойство LineStyle .

private bool HasTopBorder(Excel.Range r)
{
    return ((Excel.XlLineStyle)r.Borders[Excel.XlBordersIndex.xlEdgeTop].LineStyle) !=
        Excel.XlLineStyle.xlLineStyleNone;
}

Интересно, что LineStyle возвращает целое число, следовательно, приведение. Это означает, что вы можете просто выяснить, что такое перечисление для xlLineStyleNone, и провести это сравнение, но независимо от того, что вы увеличите в эффективности, вы потеряете больше в прозрачности.

И снова, укажите это, если это имеет смысл в вашем код, но я хотел изолировать логи c вам нужно.

...