范围内的单元格样式对齐
Posted
技术标签:
【中文标题】范围内的单元格样式对齐【英文标题】:Cell Style Alignment on a range 【发布时间】:2012-07-16 19:25:45 【问题描述】:我在 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;
为什么当我将它设置为只在一个单元格上工作时它会改变多个单元格的样式?它不应该按我想要的方式工作吗?还有其他方法吗?
【问题讨论】:
【参考方案1】:这很好用
worksheet.get_Range("A1","A14").Cells.HorizontalAlignment =
Microsoft.Office.Interop.Excel.XlHAlign.xlHAlignLeft;
【讨论】:
【参考方案2】:根据 OP 的评论,“我发现了问题。显然是 worksheet.Cells[y + 1, x + 1].HorizontalAlignment”,我相信真正的解释是所有单元格开始共享同一个 Style 对象.因此,如果您更改该样式对象,它会更改所有使用它的单元格。但是如果你只是直接改变单元格的对齐属性,只有那个单元格会受到影响。
【讨论】:
是的哈哈,写完之前不小心提交了该评论。我想我删除它的尝试失败了。worksheet.get_Range("A1", "A1").Style.HorizontalAlignment = Microsoft.Office.Interop.Excel.XlHAlign.xlHAlignCenter;
会改变每个单元格的对齐方式。只改变一个(或在一个范围内)使用worksheet.Cells[y, x].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;
【讨论】:
顺便说一句,如果你想在单个单元格上工作,你可以为它提供相同的开始和结束范围。例如:Excel.Range currentRange = (Excel.Range)excelWorksheet.get_Range(startRange , startRange ); 它仍在将所有单元格更改为左对齐【参考方案4】:直接在范围或单元格中修改样式对我不起作用。但想法是:
-
创建单独的样式
应用所有必要的样式属性值
将样式名称设置为范围的
Style
属性
,在MSDN How to: Programmatically Apply Styles to Ranges in Workbooks 中给出了这项工作。
例如:
var range = worksheet.Range[string.Format("A0:C0", 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;
这对我来说很好。
【讨论】:
【参考方案6】:不要使用“样式:”
worksheet.Cells[y,x].HorizontalAlignment = Microsoft.Office.Interop.Excel.XlHAlign.xlHAlignLeft;
【讨论】:
【参考方案7】:对我有用的东西。享受吧。
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;
【讨论】:
【参考方案8】:Manikandan 的回答很好。对于 SpreadSheetGear 用户(用于与电子表格进行更轻松交互的 C# 框架),请尝试以下操作:
workbook.Worksheets[0].Cells["B1:B4"].HorizontalAlignment = HAlign.Center;
。
这会将工作表中的所有单元格从 B1 对齐到 B4(第 2 列 - 第 1 行到第 4 行)。
【讨论】:
以上是关于范围内的单元格样式对齐的主要内容,如果未能解决你的问题,请参考以下文章