范围内的单元格样式对齐

问题描述 投票:0回答:9

我在设置 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;

当我将其设置为仅适用于一个单元格时,为什么它会改变多个单元格的样式?它不应该按照我想要的方式工作吗?还有其他方法可以做到这一点吗?

c# excel format alignment
9个回答
37
投票

这个效果很好

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

32
投票

根据OP的评论,“我发现了问题。applyworksheet.Cells[y + 1, x + 1].HorizontalAlignment”,我相信真正的解释是所有单元格开始共享相同的 Style 对象。因此,如果您更改该样式对象,它会更改所有使用它的单元格。但如果您直接更改单元格的对齐属性,则只有该单元格受到影响。


8
投票

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

// 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
投票

不要使用“风格:

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

1
投票

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

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

这对我来说效果很好。


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;

0
投票

就我而言,效果很好..

>  worksheet.Range("A4:D4").Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Center;

-1
投票

Manikandan 的回答很好。对于 SpreadSheetGear 用户(用于更轻松地与电子表格交互的 C# 框架),请尝试以下操作:

workbook.Worksheets[0].Cells["B1:B4"].HorizontalAlignment = HAlign.Center;
。 这将对齐工作表中从 B1 到 B4 的所有单元格(第 2 列 - 第 1 行到第 4 行)。

© www.soinside.com 2019 - 2024. All rights reserved.