excel表格中的超级脚本不在asp.net中的数据集中

即时通讯尝试导入Excel表格值文本框。 在数据集超级脚本值不会来。 像x到2的幂。 它在数据集x2到来我需要得到超级脚本,因为它是在数据集

下面是从Excel中获取值的代码

string excelConnectionString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + path1 + ";Extended Properties=Excel 12.0;Persist Security Info=False"; //Create Connection to Excel work book OleDbConnection excelConnection = new OleDbConnection(excelConnectionString); //Create OleDbCommand to fetch data from Excel OleDbCommand cmd = new OleDbCommand("Select [Answer],[Question],[Option1],[Option2],[Option3],[Option4],[Solution] from [Sheet1$]", excelConnection); OleDbDataAdapter da = new OleDbDataAdapter(cmd); DataSet ds = new DataSet(); da.Fill(ds); 

请检查屏幕截图

http://postimg.org/image/wbb6bv1d5/

根本的问题是,上标不是单元格的一部分,它是单元格格式的一部分

您的代码将提取单元格的值,实际上这些值只是简单的string,然后将这些string存储在DataSet

因此你有两个问题:

  1. 你需要弄清楚如何在代码中表示,存储和使用这个“ 格式化的文本”
  2. 您需要了解如何从Excel电子表格中提取这些额外的格式信息

我看到3种可能的解决方法。 只有你根据你想要达到的目标以及你的其他代码如何符合你的“全貌”,才能知道哪一个最适合你,但根据我所知,这些大概是按照优先顺序排列的:

  1. 那些带有上标的格式化的“string”看起来非常像科学记数法中给我的数字! 如果是这种情况,build议您尽可能将它们存储在Excel电子表格和代码中。 这样做意味着您在导入后将这些浮点数存储在DataSet 。 然后,当你从DataSet使用它们时,你可以将它们以合适的方式显示出来
  2. 计划B将从Excel工作表中提取格式信息,以便您可以在代码中复制此信息。 这个方法有两个问题需要解决 – 第一个是你需要使用不同的方法从你的Excel文件中导出数据,第二个是你需要一些合适的对象来存储具有上标元素的格式化文本的表示。 这些都是可以使用(如果一点点kludgy)使用像EPPlus的图书馆。 例如,使用html来表示string,我可以做这样的事情(在一个合适的循环内循环遍历所有你想要导出的excel行):

     using (ExcelPackage package = new ExcelPackage(new FileInfo(@"C:\temp\superscriptExample.xlsx"))) { var ws = package.Workbook.Worksheets.First(); ExcelRichTextCollection richText = ws.Cells[1, 1].RichText; string htmlString = ""; foreach (var part in richText) { if (part.VerticalAlign == ExcelVerticalAlignmentFont.Superscript) { htmlString += "<sup>" + part.Text + "</sup>"; } else { htmlString += part.Text; } } } 
  3. 计划C:如果你确定所有的string的格式都是“xxxxxx10ssN”,其中ss是上标的部分,那么你可以将每个stringparsing成一个html元素(或者任何你用来表示格式化的对象文本),如下所示:

     static string GetHtmlRepresentation(string inputTxt) { int indexOf10 = inputTxt.IndexOf("10"); int indexOfN = inputTxt.IndexOf("N", indexOf10); string beforeSupPart = inputTxt.Substring(0, indexOf10 + 2); string supPart = inputTxt.Substring(indexOf10 + 2, indexOfN - (indexOf10 + 2)); string afterSup = inputTxt.Substring(indexOfN, inputTxt.Length - indexOfN); return beforeSupPart + "<sup>" + supPart + "</sup>" + afterSup; } 

    这个选项是非常丑陋的,但如果你只是需要一点快速和肮脏的“完成工作”的解决scheme,那么也许你想看看它。