代码之家  ›  专栏  ›  技术社区  ›  naspinski

用C分析XLS文件时出现问题#

  •  3
  • naspinski  · 技术社区  · 16 年前

    好吧,让我们看看我能不能理解。

    我编写了一个程序来解析一个Excel文件,它工作得很好。我使用以下方法进入文件:

    string FileToConvert = Server.MapPath(".") + "\\App_Data\\CP-ARFJN-FLAG.XLS";
    string connectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + FileToConvert + ";Extended Properties=Excel 8.0;";
    OleDbConnection connection = new OleDbConnection(connectionString);
    connection.Open();
    //this next line assumes that the file is in default Excel format with Sheet1 as the first sheet name, adjust accordingly
    OleDbDataAdapter adapter = new OleDbDataAdapter("SELECT * FROM [CP-ARFJN-FLAG$]", connection);
    

    这很管用。但是当我在实际文件上尝试它(它由另一个程序提供给我)时,我会得到这个错误:

    System.Data.OleDb.OleDbException: External table is not in the expected format. at System.Data.OleDb.OleDbConnectionInternal..ctor(OleDbConnectionString constr, OleDbConnection connection) at System.Data.OleDb.OleDbConnectionFactory.CreateConnection(DbConnectionOptions options, Object poolGroupProviderInfo, DbConnectionPool pool, DbConnection owningObject) at System.Data.ProviderBase.DbConnectionFactory.CreateNonPooledConnection(DbConnection owningConnection, DbConnectionPoolGroup poolGroup) at System.Data.ProviderBase.DbConnectionFactory.GetConnection(DbConnection owningConnection) at System.Data.ProviderBase.DbConnectionClosed.OpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory) at System.Data.OleDb.OleDbConnection.Open() at wetglobe.Page_Load(Object sender, EventArgs e)
    

    但是,这就是我认为问题所在。如果我将该文件保存到本地Excel中,首先会弹出:

    cp-arfjn-flag.xls可能包含功能 与文本不兼容(选项卡 划界的)你想保留 此格式的工作簿?

    • 保持这种格式 如果有任何不兼容的功能,请单击 对。
    • 要保留功能,请单击“否”。 10在最新的Excel中保存一份副本 格式。
    • 要查看可能丢失的内容,请单击 帮助。

    如果我单击“否”,然后将其保存为当前的Excel格式,则程序将正常工作。

    所以我假设这是保存在一些疯狂的旧Excel格式?

    我想我的问题是:

    • 我怎么知道Excel的版本 救了这个?
    • 我该如何解析它的当前内容 状态?
    • -或者-我可以用程序将其保存为新版本吗?

    我希望这是清楚的…谢谢您。

    3 回复  |  直到 15 年前
        1
  •  8
  •   Ed Harper    16 年前

    听起来您的第三方应用程序生成的XLS文件可能不是真正的Excel格式-它可能实际上是一个以制表符分隔的文本文件,扩展名为.xls。

    尝试用文本编辑器打开它,然后查看。

    如果是制表符分隔的,则可以放弃OLEDB适配器,并将其作为标准文本文件打开/分析。

        2
  •  0
  •   Richard Poole MatzFan    16 年前

    如果生成的文件的格式将来可能发生更改(可能在升级第三方应用程序时),则您可能更喜欢使用 Office Primary Interop Assemblies . 这些将加载由Excel生成的文件的任何版本或格式。缺点是您需要在服务器上安装Office。

        3
  •  0
  •   Oyster    15 年前

    我解决了这个问题。Excel文件应由MS Excel 2003生成,而不是由MS Excel 2007“另存为97-2003”生成。 所以你必须从任何来源下载一个文件。然后手动将数据复制到工作表。这对我很管用。