【问题标题】:Spreadsheet Upload电子表格上传
【发布时间】:2010-07-09 10:35:18
【问题描述】:

通过 C# 上传电子表格时遇到一个奇怪的问题。

这是我正在使用的电子表格示例:

JournalISSN
-----------
1650327
223956
1651781
9254927
3064530
9209964
924977X <- this is causing an error
3768716

我的上传代码(为简洁起见)

string connectionString = "Provider=Microsoft.Jet.OleDb.4.0; Data Source="
            + Server.MapPath("/admin/journals/upload.xls") + "; Extended Properties=\"Excel 8.0;HDR=YES;\"";

        DbProviderFactory factory = DbProviderFactories.GetFactory("System.Data.OleDb");

using (DbCommand Command = Connection.CreateCommand())
            {
                Command.CommandText = "SELECT [JournalISSN], JournalTitle, JournalDescription, ImpactFactor, Psychology "
                    + "FROM [Sheet1$]";

using (DbDataReader DataReader = Command.ExecuteReader())
{
     while (DataReader.Read())
     {
           Response.Write(string.IsNullOrEmpty(DataReader["JournalISSN"].ToString()) + "<br/>");
      }
}

现在发生的情况是,当 DataReader 到达“JournalISSN”列中带有“X”的行时,它返回 True(所以它是 null/空),所有其他列都返回 false。所以问题似乎是,每当一列包含非数字字符时,它不会在上传过程中被拉出。

我尝试过的一些事情:

  • 将“X”移动到文本中的不同位置(即 111X111)
  • 更改为不同的字母
  • 删除单元格并重新开始
  • 将 excel 中的格式类型设置为“常规” - 应用于所有行。

如果您能提供任何关于为什么会发生这种情况的帮助/见解,我们将不胜感激。

干杯,肖恩

【问题讨论】:

  • 您是否尝试过将单元格格式化为文本?
  • @Stuart Dunkeld - 是的,刚刚尝试过,仍然返回同样的问题。

标签: c# excel upload


【解决方案1】:

您可能会在更改连接字符串以包含IMEX=1 扩展属性时找到运气。使用 IMEX=1 将强制 ADO 将每一列视为字符串,而不是尝试识别数据类型。您可以找到更多详细信息here

【讨论】:

  • 非常感谢您!它现在完美运行。你知道为什么会这样吗?这几乎就像将第一行读取为数字一样,因此使用相同的数据类型处理之后的任何行...
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-05
  • 1970-01-01
相关资源
最近更新 更多