it-swarm.com.ru

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

У меня проблема с отображением ячеек на листе 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;

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

25
kschieck

На основании этого комментария от ОП: «Я обнаружил проблему. Очевидно, рабочий лист. Ячейки [y + 1, x + 1]. Горизонтальное выравнивание», я считаю, что настоящее объяснение состоит в том, что все ячейки начинают совместно использовать один и тот же объект стиля. Поэтому, если вы измените этот стиль объекта, он изменит все ячейки, которые его используют. Но если вы просто измените свойство выравнивания ячейки напрямую, это повлияет только на эту ячейку.

21
DGH

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

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

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

// 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;
6
crackhaus

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

  1. создать отдельный стиль
  2. применить все необходимые значения свойств стиля
  3. установите имя стиля в свойство 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;
1
horgh
  ExcelApp.Sheets[1].Range[ExcelApp.Sheets[1].Cells[1, 1], ExcelApp.Sheets[1].Cells[70, 15]].Cells.HorizontalAlignment =
                 Microsoft.Office.Interop.Excel.XlHAlign.xlHAlignCenter;

Это прекрасно работает для меня.

1
Reginardo Tribuzi Lula Júnior

Не используйте "Стиль:

worksheet.Cells[y,x].HorizontalAlignment = Microsoft.Office.Interop.Excel.XlHAlign.xlHAlignLeft;
0
Sheep_Sleep

Что-то, что работает для меня. Наслаждаться.

Excel.Application excelApplication =  new Excel.Application()  // start Excel and turn off msg boxes
{
     DisplayAlerts = false,
     Visible = false
};

Excel.Workbook workBook = excelApplication.Workbooks.Open(targetFile);
Excel.Worksheet workSheet = (Excel.Worksheet)workBook.Worksheets[1];

var rDT = workSheet.Range(workSheet.Cells[monthYearNameRow, monthYearNameCol], workSheet.Cells[monthYearNameRow, maxTableColumnIndex]);
rDT.Merge();
rDT.Value = monthName + " " + year;
var reportDateRowStyle = workBook.Styles.Add("ReportDateRowStyle");
reportDateRowStyle.HorizontalAlignment = XlHAlign.xlHAlignCenter;
reportDateRowStyle.Font.Color = System.Drawing.ColorTranslator.ToOle(System.Drawing.Color.Black);
reportDateRowStyle.Font.Bold = true;
reportDateRowStyle.Font.Size = 14;
rDT.Style = reportDateRowStyle;
0
Academy of Programmer