Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 导出和导入C中的.xls(x)-表错误_C#_Excel_Import_Export - Fatal编程技术网

C# 导出和导入C中的.xls(x)-表错误

C# 导出和导入C中的.xls(x)-表错误,c#,excel,import,export,C#,Excel,Import,Export,我正在使用这些连接字符串,具体取决于文件的扩展名: public static string ExcelConnectionString(string filePath) { OleDbConnectionStringBuilder sbConnection = new OleDbConnectionStringBuilder(); String strExtendedProperties = String.Empty;

我正在使用这些连接字符串,具体取决于文件的扩展名:

  public static string ExcelConnectionString(string filePath)
  {
                OleDbConnectionStringBuilder sbConnection = new OleDbConnectionStringBuilder();
                String strExtendedProperties = String.Empty;
                sbConnection.DataSource = filePath;

            if (Path.GetExtension(filePath).Equals(".xls"))//for 97-03 Excel file
            {
                sbConnection.Provider = "Microsoft.Jet.OLEDB.4.0";
                strExtendedProperties = "Excel 8.0";//HDR=ColumnHeader,IMEX=InterMixed
            }
            else if (Path.GetExtension(filePath).Equals(".xlsx"))  //for 2007 Excel file
            {
                sbConnection.Provider = "Microsoft.ACE.OLEDB.12.0";
                strExtendedProperties = "Excel 12.0";
            }

            sbConnection.Add("Extended Properties", strExtendedProperties);

            return sbConnection.ToString();
    }
但是,当我导入xls文件而不使用“另存为:2003 xls”或“另存为:xlsx”选项时。因此,当我用control+s保存下载的文件时,它将无法工作。我最终会出现以下错误:

usercode未处理OLEDBEException-外部表不是预期格式

我怎样才能解决这个问题?我的系统需要使用control+s来保存文件,而不是手动选择其中一个

问题可能是我进行的导出*,因为在导出后手动打开文件时,我会看到以下窗口:

The file you are trying to open "yourfile.xls" in a different format than specified file extension. Verify that the file is not corrupted and is from a trusted source before opening the file. Do you want to open the file now? 
*导出文件是一个生成的XML文件,另存为.xls。 有没有办法在没有警告的情况下将其保存为.xls?我真的需要控件+s来保存文件

提前谢谢

简言之: 如何将创建的XML文件保存为XLS,而不出现上面显示的错误。
我不想使用外部库,只有在没有它们的情况下才可能使用外部库。

将97-03 Excel文件.xls的代码替换为以下内容

sbConnection.Provider = "Microsoft.ACE.OLEDB.12.0";
strExtendedProperties = "Excel 8.0";//HDR=ColumnHeader,IMEX=InterMixed

此连接字符串用于使用Office 2007 OLEDB驱动程序ACE 12.0连接到较旧的97-2003 Excel工作簿。

将97-03 Excel文件.xls的代码替换为以下内容

sbConnection.Provider = "Microsoft.ACE.OLEDB.12.0";
strExtendedProperties = "Excel 8.0";//HDR=ColumnHeader,IMEX=InterMixed

此连接字符串用于使用Office 2007 OLEDB驱动程序ACE 12.0连接到较旧的97-2003 Excel工作簿。

您有大量证据表明该文件实际上不是以本机Excel格式保存的电子表格文件。换句话说,是一个真正的.xls或.xlsx文件

因此,您正在与一个选择了错误文件名的蹩脚程序进行斗争,该程序转换了XML文件。这种程序可能选择的格式是.csv,逗号分隔的值。Excel知道如何读取的格式。然而,您使用的OleDb提供程序并不是那么聪明。它需要知道连接字符串的真实格式

您确实需要知道文件实际包含的内容,才能知道如何配置连接字符串。一个起点是查看文件的实际内容。使用十六进制查看器。如果你不明白,就贴一张截图。或者使用记事本,我的水晶球预测你会看到完全可读的文本

首先是:

更新:文档被格式化为XML文件,我可以通过使用XML电子表格2003格式保存电子表格来重新设置标题。预期的文件扩展名为.xml。OleDb提供程序无法按原样读取文档,需要进行转换。你可以编写一个控制台模式的应用程序来处理它。Project+添加引用,COM选项卡,选择Microsoft Excel x.x对象库。使代码类似于以下内容:

using System;
using Excel = Microsoft.Office.Interop.Excel;

class Program {
    [STAThread]
    static int Main(string[] args) {
        var app = new Excel.Application();
        try {
            if (args.Length != 2) throw new Exception("Usage: Convert inputfile outputfile");
            var book = app.Workbooks.OpenXML(args[0]);
            System.IO.File.Delete(args[1]);
            book.SaveAs(args[1], FileFormat: Excel.XlFileFormat.xlExcel8);
            app.Quit();
            return 0;
        }
        catch (Exception ex) {
            Console.WriteLine(ex.Message);
            Console.ReadLine();
            app.Quit();
            return -1;
        }
    }
}

以防万一:确保查看该转换器的输出文件,而不是输入文件。

您有大量证据表明该文件实际上不是以本机Excel格式保存的电子表格文件。换句话说,是一个真正的.xls或.xlsx文件

因此,您正在与一个选择了错误文件名的蹩脚程序进行斗争,该程序转换了XML文件。这种程序可能选择的格式是.csv,逗号分隔的值。Excel知道如何读取的格式。然而,您使用的OleDb提供程序并不是那么聪明。它需要知道连接字符串的真实格式

您确实需要知道文件实际包含的内容,才能知道如何配置连接字符串。一个起点是查看文件的实际内容。使用十六进制查看器。如果你不明白,就贴一张截图。或者使用记事本,我的水晶球预测你会看到完全可读的文本

首先是:

更新:文档被格式化为XML文件,我可以通过使用XML电子表格2003格式保存电子表格来重新设置标题。预期的文件扩展名为.xml。OleDb提供程序无法按原样读取文档,需要进行转换。你可以编写一个控制台模式的应用程序来处理它。Project+添加引用,COM选项卡,选择Microsoft Excel x.x对象库。使代码类似于以下内容:

using System;
using Excel = Microsoft.Office.Interop.Excel;

class Program {
    [STAThread]
    static int Main(string[] args) {
        var app = new Excel.Application();
        try {
            if (args.Length != 2) throw new Exception("Usage: Convert inputfile outputfile");
            var book = app.Workbooks.OpenXML(args[0]);
            System.IO.File.Delete(args[1]);
            book.SaveAs(args[1], FileFormat: Excel.XlFileFormat.xlExcel8);
            app.Quit();
            return 0;
        }
        catch (Exception ex) {
            Console.WriteLine(ex.Message);
            Console.ReadLine();
            app.Quit();
            return -1;
        }
    }
}

以防万一:请确保查看该转换器的输出文件,而不是输入文件。

能否提供一个示例文件?在使用连接字符串打开文件的地方发布代码可能会有所帮助。您能提供一个示例文件吗?在使用连接字符串打开文件的地方发布代码可能会有所帮助。我以前确实使用过CSV,但不知何故,应该可以将文件更新为真正的文件,对吗?与另存为类似?从CSV转换为XLS需要使用Excel。当然,这是可能的,您可以使用Microsoft.Office.Interop.Excel命名空间将其自动化。实际上没有必要,您的OleDb提供商知道如何。你只要告诉我就行了。那么,这个文件实际上包含什么呢?你试过openi吗
把它放在记事本里?它看起来像什么?它以:w3.org/TR/REC-html40>开始,保存的als.xls显示黑色块,其中有[NUL]和[ETX]或[DC4],例如。我以前确实使用过CSV,但不知何故,应该可以将文件更新为真正的文件,对吗?与另存为类似?从CSV转换为XLS需要使用Excel。当然,这是可能的,您可以使用Microsoft.Office.Interop.Excel命名空间将其自动化。实际上没有必要,您的OleDb提供商知道如何。你只要告诉我就行了。那么,这个文件实际上包含什么呢?你试过用记事本打开它吗?它看起来像什么?它以:w3.org/TR/REC-html40>开始,保存的als.xls显示黑色块,其中包含[NUL]和[ETX]或[DC4]。