excel工作表中的超级脚本没有出现在asp.net的数据集中
Posted
技术标签:
【中文标题】excel工作表中的超级脚本没有出现在asp.net的数据集中【英文标题】:super scripts in excel sheet not coming in dataset in asp.net 【发布时间】:2015-07-17 15:49:08 【问题描述】:我正在尝试将 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】:根本问题是上标不是单元格值的一部分,它是单元格格式的一部分。
您的代码提取单元格的值,这些值实际上只是简单的字符串,然后您将这些字符串存储在您的 DataSet
中。
因此,您有 2 个问题:
-
您需要确定如何在代码中表示、存储和使用此“格式化文本”
您需要弄清楚如何从 Excel 电子表格中提取这些额外的格式信息
我看到了 3 种可能的方法来解决这个问题。根据您要实现的目标以及它如何与您的其他代码相匹配,只有您会知道哪个最适合您的“大图”,但根据我所知道的,这些大致按优先顺序排列:
-
在我看来,那些带有上标的格式化“字符串”看起来非常像以科学计数法表示的数字!如果是这种情况,建议您尽可能将它们存储在 Excel 电子表格和代码中。这样做意味着您可以在导入后将这些浮点数存储在您的
DataSet
中。然后,当您从DataSet
使用它们时,您可以以任何您需要的方式显示它们。
B 计划是从 Excel 工作表中提取格式信息,以便您可以在代码中复制这些信息。使用这种方法需要解决 2 个问题 - 第一个是您需要使用不同的方法从 Excel 文件中导出数据,第二个是您需要一些合适的对象来存储带有上标元素的格式化文本的表示.使用像EPPlus 这样的库是可以实现的(如果有点笨拙的话)。例如,使用 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;
计划 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;
这个选项非常丑陋,但如果您只需要一些快速而肮脏的“完成工作”解决方案,那么也许您想看看它。
【讨论】:
你好@Stewart_R。我也需要子脚本,你可以编辑你的解决方案,它可以同时适用于超级脚本和子脚本。谢谢 转换为下标是否特别困难?您可以使用 html 标签<sub>
而不是 <sup>
和 part.VerticalAlign == ExcelVerticalAlignmentFont.Subscript
。以上是关于excel工作表中的超级脚本没有出现在asp.net的数据集中的主要内容,如果未能解决你的问题,请参考以下文章