sourcetip

범위에서의 셀 스타일 정렬

fileupload 2023. 4. 13. 21:05
반응형

범위에서의 셀 스타일 정렬

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;

하나의 셀에서만 작동하도록 설정하면 여러 셀의 스타일이 바뀌는 이유는 무엇입니까?내 뜻대로 안 되는 건가요?다른 방법이 있나요?

이것은 잘 작동한다.

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

OP의 이 코멘트를 근거로, 「문제를 발견했습니다.워크시트인 것 같습니다.셀 [y + 1, x + 1]"HorizontalAlignment"는 모든 셀이 동일한 스타일 객체를 공유하기 시작한다는 것이 진정한 설명이라고 생각합니다.따라서 해당 스타일 객체를 변경하면 해당 객체를 사용하는 모든 셀이 변경됩니다.그러나 셀의 정렬 속성을 직접 변경하면 해당 셀만 영향을 받습니다.

범위를 선언하는 것이 당신에게 더 좋을지도 모릅니다.

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

"스타일:"을 사용하지 마십시오.

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

범위 내에서 직접 스타일을 수정하거나 셀을 수정하는 것은 제게는 효과가 없었습니다.단, 다음과 같은 생각이 있습니다.

  1. 다른 스타일을 창조하다
  2. 필요한 모든 스타일 속성 값 적용
  3. 문체의 이름을 로 설정하다Style그 범위의 특성

MSDN의 "How to: Programmatically Apply Styles to Ranges in Workbooks"에 기재되어 있습니다.

예를 들어 다음과 같습니다.

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;
  ExcelApp.Sheets[1].Range[ExcelApp.Sheets[1].Cells[1, 1], ExcelApp.Sheets[1].Cells[70, 15]].Cells.HorizontalAlignment =
                 Microsoft.Office.Interop.Excel.XlHAlign.xlHAlignCenter;

저는 이거면 돼요.

나한테 맞는 거.즐거운 시간 되세요.

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;

마니칸단의 대답은 좋다.SpreadSheetGear 사용자(스프레드시트와 보다 쉽게 상호작용하기 위한 C# 프레임워크)는 다음과 같이 하십시오.

workbook.Worksheets[0].Cells["B1:B4"].HorizontalAlignment = HAlign.Center;이렇게 하면 시트의 모든 셀이 B1에서 B4까지 정렬됩니다(2행 1~4열).

언급URL : https://stackoverflow.com/questions/11529870/cell-style-alignment-on-a-range

반응형