.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"));
效果
https://github.com/ClosedXML/ClosedXML