如何获取默认的Excel工作表字体?

我们有C#中的Excel 2013-2016加载项。 我们使用下面的方法来获取工作表字体 :

var defaultFont = Microsoft.Office.Interop.Excel.Worksheet.Cells.Font 

一切工作,直到用户更改某些特定单元格的字体。 例如,用户更改了单元格A1并设置了字体“Arial”。 默认情况下,我们有字体“Calibri”。 此后,当我们尝试通过Worksheet.Cells.Font获取默认字体时,我们什么也得不到 – 只是空的对象。 我假设由于含糊不清:A1有字体“Arial”,其他单元格 – 默认字体“Calibri”。 我的目标是获得默认字体,即“Calibri”。 到目前为止,我重新写我的代码,现在我也检查样式:

 var workbookFont = Microsoft.Office.Interop.Excel.Worksheet.Parent.Styles["Normal"].Font; 

此解决方法返回正是我需要的 – 我的“Calibri”字体。 但后来我发现,这是因为这种字体是所有新的工作表/工作簿的默认字体(可以在Excel的选项中设置)。 如果用户select了工作表中的所有单元格,并将默认字体更改为“Times New Roman”,那么我将得到“Calibri” – 因为这是默认字体将在创build新工作表/工作簿时使用。 当我无法获得当前工作表的真实的默认字体时,我又遇到了问题。 我的下一个想法是让一些特定的单元格的字体在工作表的边缘,对用户来说不是很好用:

 var defaultFont = workSheet.Cells[1048576][16384].Font 

它看起来很奇怪,但它的工作。 我假设用户不使用工作表上的最后一个单元格。 (1048576和16384是工作表的最大尺寸 )。 我不知道这些方法的含义,所以我想知道是否存在一些“合法”的方式来获取工作表的默认字体,没有这样的拐杖?

使用时您正处于正确的道路上:

 var workbookFont = Microsoft.Office.Interop.Excel.Worksheet.Parent.Styles["Normal"].Font; 

Normal样式表格的默认字体,但表格实际上可能没有任何默认字体(或“ Normal样式)的实例,或者,所有用“ Normal样式装饰的单元格可能都会覆盖每种单元格格式的字体。

如果用户将自己的字体应用于各种范围,那么该工作表可能会有许多字体,并且它们中的任何一个都不能保证与“ Normal样式中的字体相同。 即使Font.Size可能是一致的(或者如果不是,那么它也返回null ), Font.Name可能在一张纸上有所不同,在这种情况下Font.Name返回null

当用户将自定义字体应用到具有“ Normal样式的范围时,“ Style与范围保持关联 ,并且该字体将覆盖样式中定义的任何字体。

此外,即使已使用的UsedRange仅是所有Cells一小部分,通常的做法是在更改UsedRange的字体(以便行高度按比例调整)时selectUsedRange上的所有Cells

所以,你必须select一个代表表单中使用的字体的字体,或者将字体应用到新的范围,就好像它们是Normal 。 这个select应该通过你对表单的了解以及你打算如何处理字体来告知:

  • 如果你插入一个列或一行,那么我build议你模仿Excel的行为,并使用相邻的格式。

  • 如果要添加与UsedRange不相邻的新范围,则可能需要默认为“ Normal样式。

  • 如果您正在查找UsedRange的代表字体,则可能需要避免前几行和列,因为这些字段往往是标题,而最后一行有时可能是总计。 您需要遍历范围中的单元格以查找适当的单元格格式。

  • 如果以其他格式重现表单内容,则需要检查UsedRange中每个单元格和每个单元格的UsedRange

右下angular的单元格不一定与Normal或者UsedRange使用的字体UsedRange ,因此build议不要使用它。