单元格样式对齐范围

时间:2012-07-17 19:52:01

标签: c# excel format alignment

我遇到了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;

为什么当我将其设置为仅使用多个单元格时,它会改变多个单元格的样式?是不是应该按我想要的方式工作?还有另一种方法吗?

8 个答案:

答案 0 :(得分:23)

基于OP的评论,"我发现了问题。似乎是工作表。细胞[y + 1,x + 1] .Horizo​​ntalAlignment",我相信真正的解释是所有细胞都开始共享同一个Style对象。因此,如果您更改该样式对象,它将更改使用它的所有单元格。但是,如果您只是直接更改单元格的对齐属性,则只会影响该单元格。

答案 1 :(得分:22)

这很好用

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

答案 2 :(得分:6)

也许声明一个范围可能会更适合你。

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

答案 3 :(得分:1)

直接在范围或单元格中修改样式对我来说不起作用。但想法:

  1. 创建单独的样式
  2. 应用所有必需的样式属性值
  3. 将样式名称设置为范围<{li>的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;
    

答案 4 :(得分:1)

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

这对我来说很好。

答案 5 :(得分:0)

不要使用&#34;风格:

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

答案 6 :(得分:0)

对我有用的东西。享受。

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;

答案 7 :(得分:-1)

对于SpreadSheetGear,请使用workbook.Worksheets[0].Cells["B1:B4"].HorizontalAlignment = HAlign.Center;。这将使工作表中的所有单元格从B1对齐到B4(第2列第1至4行)。希望这对所有在尝试格式化单元格时遇到问题的SpreadSheetGear用户有帮助