Подтвердить что ты не робот

Выравнивание стиля ячейки в диапазоне

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

Вот код, который я использую:

app = new Microsoft.Office.Interop.Excel.Application();
workbook = app.Workbooks.Add(1);
worksheet = (Microsoft.Office.Interop.Excel.Worksheet)workbook.Sheets[1];

//Change all cells' alignment to center
worksheet.Cells.Style.HorizontalAlignment = Microsoft.Office.Interop.Excel.XlHAlign.xlHAlignCenter;

//But then this line changes every cell style back to left alignment
worksheet.Cells[y + 1, x + 2].Style.HorizontalAlignment = Microsoft.Office.Interop.Excel.XlHAlign.xlHAlignLeft;

Почему он меняет стиль нескольких ячеек, когда я устанавливаю его только для работы над ним? Разве это не должно работать, как я хочу? Есть ли другой способ сделать это?

4b9b3361

Ответ 1

Основываясь на этом комментарии от OP, "я нашел проблему. visibleworksheet.Cells [y + 1, x + 1].HorizontalAlignment", я считаю, что реальное объяснение состоит в том, что все ячейки начинают разделять один и тот же объект Style, Поэтому, если вы измените этот объект стиля, он изменит все ячейки, которые его используют. Но если вы просто измените свойство выравнивания ячейки напрямую, затронет только эту ячейку.

Ответ 2

Это хорошо работает

worksheet.get_Range("A1","A14").Cells.HorizontalAlignment = 
                 Microsoft.Office.Interop.Excel.XlHAlign.xlHAlignLeft;

Ответ 3

Возможно, объявление диапазона может улучшить вашу работу.

// fill in the starting and ending range programmatically this is just an example. 
string startRange = "A1";
string endRange = "A1";
Excel.Range currentRange = (Excel.Range)excelWorksheet.get_Range(startRange , endRange );
currentRange.Style.HorizontalAlignment = Microsoft.Office.Interop.Excel.XlHAlign.xlHAlignLeft;

Ответ 4

Изменение стилей непосредственно в диапазоне или ячеек не работало для меня. Но идея:

  • создать отдельный стиль
  • применить все необходимые значения свойств стиля
  • установите имя стиля в свойство Style диапазона

приведенный в MSDN Как выполнить программное применение стилей в диапазонах в книгах.

Например:

var range = worksheet.Range[string.Format("A{0}:C{0}", rowIndex++)];
range.Merge();
range.Value = "some value";

var style = workbook.AddStyle();
style.HorizontalAlignment = Microsoft.Office.Interop.Excel.XlHAlign.xlHAlignLeft;

range.Style = style.Name;

Ответ 5

  ExcelApp.Sheets[1].Range[ExcelApp.Sheets[1].Cells[1, 1], ExcelApp.Sheets[1].Cells[70, 15]].Cells.HorizontalAlignment =
                 Microsoft.Office.Interop.Excel.XlHAlign.xlHAlignCenter;

Это отлично работает для меня.