我正在使用spreadsheetlight库来使用c#读取excelsheet(.xslx)值。
我可以使用以下代码
读取单元格值 for (int col = stats.StartColumnIndex; col <= stats.EndColumnIndex; col++)
{
var value= sheet.GetCellValueAsString(stats.StartRowIndex, col); //where sheet is current sheet in excel file
}
我正在获取单元格值。但是我如何获得单元格的数据类型。我已经检查过文档,但是dint会提供解决方案。
注意:对于.xls类型的excel文件我正在使用ExcelLibrary.dll库,我可以使用下面的代码轻松获取单元格的数据类型
for (int i = 0; i <= cells.LastColIndex; i++)
{
var type = cells[0, i].Format.FormatType;
}
但是在电子表格中没有类似的方法。
提前致谢。
答案 0 :(得分:1)
以下是开发人员Vincent Tang在我问他之后给出的答案,因为我不确定如何使用DataType:
是使用SLCell.DataType。它是一个枚举,但对于大多数数据,您将使用Number,SharedString和String。
文本数据将是SharedString,如果文本直接嵌入工作表中,则可能是String。有一个GetSharedStrings()或类似的东西。
对于数字数据,它将是数字。
对于约会来说,这有点棘手。数据类型也是数字(忽略日期枚举,因为Microsoft Excel不使用它)。对于日期,您还必须检查FormatCode,它位于SLCell的SLStyle中。使用GetStyles()获取列表。 SLCell.StyleIndex为您提供该列表的索引。
例如,如果您的SLCell具有单元格值&#34; 15&#34;和数据类型SharedString,然后在共享字符串列表中查找索引15。如果它&#34; blah&#34;使用String数据类型,那就是它。
如果它的号码类型为56789,那就是它。
除非FormatCode是&#34; mm-yyyy&#34; (或其他一些日期格式代码),那么56789实际上是自1900年1月1日以来的天数。
他还建议使用GetCellList()以获取工作表中的SLCell对象列表。但是,由于某种原因,我的SL版本中没有该功能,所以我使用了GetCells()。它返回SLCell对象的字典,其键为SLCellPoint。
例如,获取单元格A1的DataType(它是一个CellValues对象),执行以下操作:
using (SLDocument slDoc = new SLDocument("Worksheet1.xlsx", "Sheet1")) {
slCP = SLCellPoint;
slCP.ColumnIndex = SLConvert.ToColumnIndex("A"); ///Obviously 1 but useful function to know
slCP.RowIndex = 1;
CellValues slCV = slDoc.GetCells(slCP).DataType;
}
顺便说一句,我在打开chm帮助文件时遇到了问题。试试这个:
答案 1 :(得分:0)
要获取单元格的值,请尝试以下代码
var cellValue = (string)(excelWorksheet.Cells[10, 2] as Excel.Range).Value;
使用this链接了解详情
答案 2 :(得分:0)
查看SLCell.DataType属性。 Spreadsheetlight文档提到这将返回Spreadsheetlight.SLCell类中的Cell数据类型
public CellValues DataType { get; set; }
PS:旁注,我想出了如何打开chm文档。尝试在Winzip中打开chm文件,打开时没有任何问题。
希望它有所帮助。感谢
答案 3 :(得分:0)
好吧,在经过大量的跟踪和错误方法之后,我必须找到解决方案。
根据单元格的 formatCode ,我们可以决定单元格的 formatType 。
使用 GetCellStyle 方法,我们可以获得单元格的格式代码。使用 formatCode ,我们可以决定 formatType 。
var FieldType = GetDataType(sheet.GetCellStyle(rowIndex, columnIndex).FormatCode);
private string GetDataType(string formatCode)
{
if (formatCode.Contains("h:mm") || formatCode.Contains("mm:ss"))
{
return "Time";
}
else if (formatCode.Contains("[$-409]") || formatCode.Contains("[$-F800]") || formatCode.Contains("m/d"))
{
return "Date";
}
else if (formatCode.Contains("#,##0.0"))
{
return "Currency";
}
else if (formatCode.Last() == '%')
{
return "Percentage";
}
else if (formatCode.IndexOf("0") == 0)
{
return "Numeric";
}
else
{
return "String";
}
}
此方法适用于99%的案例。
希望它对你有所帮助。