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

时间:2015-05-07 07:45:28

标签: c# asp.net excel dataset oledb

我试图将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/

1 个答案:

答案 0 :(得分:0)

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

您的代码会提取单元格的值,这些值实际上只是简单的字符串,然后您将这些字符串存储在DataSet中。

因此,您有两个问题:

  1. 您需要弄清楚如何在代码中表示,存储和使用此“格式化的文字”
  2. 您需要了解如何从Excel电子表格中提取这些额外的格式信息
  3. 我看到3种可能的方法来解决这个问题。根据你想要实现的目标以及它与其他代码的匹配程度,只有你知道哪个最适合你的“大图”,但根据我所知,这些大致按照优先顺序排列:

    1. 带有上标的格式化“字符串”看起来非常像我用科学记数法表达的数字!如果是这种情况,建议您尽可能在Excel电子表格和代码中存储它们。这样做意味着您在导入后会在DataSet中存储这些浮点数。然后,当您从DataSet
    2. 来使用它们时,您可以以您需要的方式显示它们
    3. 计划B将从Excel工作表中提取格式信息,以便您可以在代码中复制它。使用此方法需要解决2个问题 - 第一个是您需要使用不同的方法从Excel文件中导出数据,第二个是您需要一些合适的对象来存储带有上标元素的格式化文本的表示。使用像EPPlus这样的库是可以实现的(如果有点kludgy)。例如,使用html来表示字符串我可以做这样的事情(在一个合适的循环中循环遍历你要导出的所有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;
              }
          }
      
      } 
      
    4. 计划C:如果您确定所有字符串都是格式为“xxxxxx10ssN”,其中ss是上标部分,您可以将每个字符串解析为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;
          }
      

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