.NET ClosedXML.Excel 关于转化sub与sup标签为上标下标的操作
上标和下标常见于一些数学公式和化学表达式中,有时候我们需要将这些数学公式和化学式插入到Excel中,因此就涉及到如何在Excel中插入上标和下标。本文将介绍如何使用C#和ClosedXML.Excel
组件在Excel文档中插入上标和下标。
在使用以下代码前,需要引用ClosedXML.Excel.dll到工程中,并添加命名空间
using ClosedXML.Excel;using System.IO;using System;
private string SUB_START = "<sub>";private string SUB_END = "</sub>";private string SUP_START = "<sup>";private string SUP_END = "</sup>";public void ExeclRichText(string s,IXLCell cell){if (containSubSup(s)){if ((s.IndexOf(SUB_START) < s.IndexOf(SUP_START) || s.IndexOf(SUP_START) < 0) && s.IndexOf(SUB_START) > -1){//表示先有sub_start标签if (s.IndexOf(SUB_START) > 0){cell.RichText.AddText(s.Substring(0, s.IndexOf(SUB_START)));}int n1, n2;n1 = s.IndexOf(SUB_START) + SUB_START.Length; //开始位置 n2 = s.IndexOf(SUB_END);//结束位置 cell.RichText.AddText(s.Substring(n1, n2 - n1)).SetVerticalAlignment(XLFontVerticalTextAlignmentValues.Subscript); //取搜索的条数,用结束的位置-开始的位置,并返回 s = s.Substring(n2 + SUB_END.Length);ExeclRichText(s, cell);}if ((s.IndexOf(SUB_START) > s.IndexOf(SUP_START) || s.IndexOf(SUB_START) < 0) && s.IndexOf(SUP_START) > -1){//表示先有sub_start标签if (s.IndexOf(SUP_START) > 0){cell.RichText.AddText(s.Substring(0, s.IndexOf(SUP_START)));}int n1, n2;n1 = s.IndexOf(SUP_START) + SUP_START.Length; //开始位置 n2 = s.IndexOf(SUP_END);//结束位置 cell.RichText.AddText(s.Substring(n1, n2 - n1)).SetVerticalAlignment(XLFontVerticalTextAlignmentValues.Subscript); //取搜索的条数,用结束的位置-开始的位置,并返回 s = s.Substring(n2 + SUP_END.Length);ExeclRichText(s, cell);}}else{cell.RichText.AddText(s);}}public bool containSubSup(string s){return (s.Contains(SUB_START) && s.Contains(SUB_END)) || (s.Contains(SUP_START) && s.Contains(SUP_END));}
调用方法
ExeclRichText("NH<sub>3</sub>.H<sub>2</sub>O", ws.Cell("A7"));
效果
/ClosedXML/ClosedXML