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]。