我在.NET上尝试过这个代码 - 将excel文件导入到devxpress datagrid-它工作正常,但我必须创建一个在delphi上执行相同工作的过程。我不太了解德尔福,所以我需要一些想法如何做到这一点。
public static DataTable ImportExcelXLS(string FileName, bool hasHeaders)
{
string HDR = hasHeaders ? "Yes" : "No";
string strConn;
if (FileName.Substring(FileName.LastIndexOf('.')).ToLower() == ".xlsx")
strConn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + FileName + ";Extended Properties=\"Excel 12.0;HDR=" + HDR + ";IMEX=0\"";
else
strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + FileName + ";Extended Properties=\"Excel 8.0;HDR=" + HDR + ";IMEX=0\"";
//DataSet output = new DataSet();
using (OleDbConnection conn = new OleDbConnection(strConn))
{
conn.Open();
DataTable schemaTable = conn.GetOleDbSchemaTable(
OleDbSchemaGuid.Tables, new object[] { null, null, null, "TABLE" });
foreach (DataRow schemaRow in schemaTable.Rows)
{
string sheet = schemaRow["TABLE_NAME"].ToString();
if (!sheet.EndsWith("_"))
{
try
{
OleDbCommand cmd = new OleDbCommand("SELECT * FROM [" + sheet + "]", conn);
cmd.CommandType = CommandType.Text;
DataTable outputTable = new DataTable(sheet);
new OleDbDataAdapter(cmd).Fill(outputTable);
if (outputTable.Rows.Count > 0)
{
return outputTable;
}
}
catch (Exception ex)
{
throw new Exception(ex.Message + string.Format("Sheet:{0}.File:F{1}", sheet, FileName), ex);
}
}
}
}
return null;
}
答案 0 :(得分:3)
您有三个与Microsoft Excel表格互操作的主要选项
1)您的源使用OLE DB来访问数据。这有三个主要错误:
但如果它有效,它会快速方便。
您还可以阅读很多教程和方法。例如,使用BabelFish或GoogleTranslate,您可以尝试http://devdelphi.ru/?p=63
2)您可以将运行的Excel应用程序用作COM服务器。您只需要在表单上删除ExcelApplication
组件即可。请参阅c:\ RAD Studio \ 9.0 \ OCX \ Servers \
这可以说是使用Excel的最常用方法。它没什么优势:
然而
同样,您有很多关于使用该组件的教程。您有很多关于使用Visual Basic来控制Excel的Microsoft教程
等等。如果你想改变你的方法 - 你会有很多信息
2.1)也可以使用OpenOffice.org(运行scalc.exe服务器,通过COM或HTTP控制,就像运行excel.exe服务器一样)来读/写Microsoft Office文件,一些Web服务器也可以这样做。但是,有可能我没有看到这种方法受欢迎。所以只要提一下。
3)有一些Delphi本地库能够直接读/写Excel文件
然而