【问题标题】:How can I get my wrapped column headings to horizontally align?如何让包装的列标题水平对齐?
【发布时间】:2016-03-25 10:13:15
【问题描述】:

我正在 Excel 电子表格上创建一个“列标题行”,最终看起来像这样:

请注意,跨越多条“行”的列标题在其单元格内是如何不水平对齐的。最后一条“线”似乎很好地居中,但它之前/之上的那些是偏离中心的。例如,对于“Member Item Code”,“Member”way 离左边太远,“Item”也离左边太远(但不太严重),而“Code”看起来很完美.但是我的代码显然不是很完美。

am将“中心”的水平对齐应用到这些单元格:

var unitHeaderCell = (Excel.Range)_xlSheet.Cells[rowToPopulate, DETAIL_UNIT_COL];
unitHeaderCell.Value2 = "Unit";

var custNumHeaderCell = (Excel.Range)_xlSheet.Cells[rowToPopulate, DETAIL_CUSTNUM_COL];
custNumHeaderCell.Value2 = String.Format("Customer{0}Number", Environment.NewLine);
custNumHeaderCell.HorizontalAlignment = Excel.XlHAlign.xlHAlignCenter;
custNumHeaderCell.WrapText = true;

var custNameHeaderCell = (Excel.Range)_xlSheet.Cells[rowToPopulate, DETAIL_CUSTNAME_COL];
custNameHeaderCell.Value2 = String.Format("Customer{0}Name", Environment.NewLine);
custNameHeaderCell.HorizontalAlignment = Excel.XlHAlign.xlHAlignCenter;
custNameHeaderCell.WrapText = true;

var memberItemCodeHeaderCell = (Excel.Range)_xlSheet.Cells[rowToPopulate, DETAIL_MEMBERITEMCODE_COL];
memberItemCodeHeaderCell.Value2 = String.Format("Member{0}Item{0}Code", Environment.NewLine);
memberItemCodeHeaderCell.HorizontalAlignment = Excel.XlHAlign.xlHAlignCenter;
memberItemCodeHeaderCell.WrapText = true;
memberItemCodeHeaderCell.ColumnWidth = DETAIL_MEMBERITEMCODE_COL_WIDTH;

var qtyHeaderCell = (Excel.Range)_xlSheet.Cells[rowToPopulate, DETAIL_QTY_COL];
qtyHeaderCell.Value2 = "Qty";

var bidPriceHeaderCell = (Excel.Range)_xlSheet.Cells[rowToPopulate, DETAIL_BIDPRICE_COL];
bidPriceHeaderCell.Value2 = "Bid Price";

我必须怎么做才能使这些词的所有居中(不仅仅是最后一个词)?

【问题讨论】:

  • 字与字之间不用加Environment.NewLine,字与字之间可以用空格包裹列内容,根据列宽分多行显示。
  • 但它会居中吗?如果没有,那对我没有任何好处。实际上,我现在正在测试它,因为我们输入...不,没有工作 - 它不会换行文本,即使我将 WrapText 设置为 true。
  • 是的,它将使用tahomacalibri 字体居中。但是当您使用Environment.NewLine 时,它只使用calibri 而不是tahoma
  • 是的,它居中(我使用的是 Tahoma),但它不换行,因此使列太宽。
  • 我发布了我测试的代码。让我知道结果。

标签: c# centering excel-interop


【解决方案1】:

你不需要在单词之间添加Environment.NewLine,你可以简单地在单词之间使用空格并包裹列的内容,并根据列宽显示多行。

在下面的代码中,我将范围内的所有单元格设置为环绕文本并垂直和水平居中。

也只是为了测试,我设置了第 5 列的列宽。

//Using
using XL = Microsoft.Office.Interop.Excel;

//Code
XL.Application application = new XL.Application();
application.Visible = true;
var book = application.Workbooks.Add();
var sheet = book.Worksheets[1];

sheet.Cells[1, 1].Value2 = "Unit";
sheet.Cells[1, 2].Value2 = "Customer Number";
sheet.Cells[1, 3].Value2 = "Customer Name";
sheet.Cells[1, 4].Value2 = "Member Item Code";
sheet.Cells[1, 5].Value2 = "Qty";
sheet.Cells[1, 5].ColumnWidth = 30;
sheet.Cells[1, 6].Value2 = "Bad Price";

var range = sheet.Range("A1", "F1");
range.VerticalAlignment = XL.XlVAlign.xlVAlignCenter;
range.HorizontalAlignment = XL.XlHAlign.xlHAlignCenter;
range.WrapText = true;

这是默认字体设置的结果:

这是使用自定义字体设置的结果:

range.Font.Name = "Tahoma";
range.Font.Bold = true;
range.Font.Size = 9;

【讨论】:

  • 不行,还是不行;请参阅更新 2。
  • 如何设置“会员项目代码”列的列宽?
  • 设置为 64。我还没有,但有时我会想起 Bea'les。
  • 你能用 Excel 换行该列的文本吗?
  • 您所说的“您可以使用 Excel 换行该列的文本吗?”是什么意思? - 取消注释单元格值通常被包装的代码?
猜你喜欢
  • 1970-01-01
  • 2011-01-26
  • 2014-05-27
  • 1970-01-01
  • 1970-01-01
  • 2016-12-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多