C# 使用oledb编写包含大量数据的excel时出错
我在使用oledb将数据插入Excel时遇到问题 问题是:当我试图将不到65000行的数据写入Excel时,它是有效的。但当我尝试写入65000多行时,会出现一个错误: 电子表格已满 我想一次写日期是有限制的 我有超过1000000行的数据要写 一行由6列和大约100个字符组成 这是我的源代码C# 使用oledb编写包含大量数据的excel时出错,c#,C#,我在使用oledb将数据插入Excel时遇到问题 问题是:当我试图将不到65000行的数据写入Excel时,它是有效的。但当我尝试写入65000多行时,会出现一个错误: 电子表格已满 我想一次写日期是有限制的 我有超过1000000行的数据要写 一行由6列和大约100个字符组成 这是我的源代码 private static OleDbConnection CreateConnection(string ExcelPath) { OleDbConnectionStringB
private static OleDbConnection CreateConnection(string ExcelPath)
{
OleDbConnectionStringBuilder ConnectionBuilder = new OleDbConnectionStringBuilder();
ConnectionBuilder.Provider = "Microsoft.Jet.OLEDB.4.0";
ConnectionBuilder.DataSource = ExcelPath;
ConnectionBuilder.Add("Extended Properties", "Excel 8.0");
return new OleDbConnection(ConnectionBuilder.ToString());
}
using (OleDbConnection Connection = CreateConnection(@"C:\userinfo.xls"))
{
Connection.Open();
OleDbCommand tempCmd = Connection.CreateCommand();
tempCmd.CommandText = CreateTableQury(dt, "Sheet1");
tempCmd.ExecuteNonQuery();
tempCmd.CommandText = CreateInsertQuery(dt, tempCmd.Parameters, "Sheet1");
int extime = 1;
foreach (DataRow Row in dt.Rows)
{
for (int t = 0; t < tempCmd.Parameters.Count; t++)
{
tempCmd.Parameters[t].Value = Row[t];
}
tempCmd.ExecuteScalar();
extime++;
if ((extime % 1000) == 0)
{
Console.WriteLine("EXCEL " + extime + " Line / time:" + sw.Elapsed.ToString());
}
}
Connection.Close();
}
public static string CreateTableQury(DataTable Table, string SheetName)
{
string Query = "CREATE TABLE [" + SheetName + "] (";
for (int i = 0; i < Table.Columns.Count; i++)
{
Query += Table.Columns[i].ColumnName + " text";
if (i < Table.Columns.Count - 1) Query += ", ";
else Query += ")";
}
return Query;
}
public static string CreateInsertQuery(DataTable Table, OleDbParameterCollection Parameters, string SheetName)
{
string Query = @"INSERT INTO [" + SheetName + "] VALUES (";
for (int i = 0; i < Table.Columns.Count; i++)
{
Query += "@Param" + i.ToString();
if (i < Table.Columns.Count - 1) Query += ", ";
else Query += ")";
OleDbParameter Parameter = new OleDbParameter("@Param" + i.ToString(), DbType.String);
Parameters.Add(Parameter);
}
return Query;
}
专用静态OleDbConnection CreateConnection(字符串ExcelPath)
{
OleDbConnectionStringBuilder ConnectionBuilder=新的OleDbConnectionStringBuilder();
ConnectionBuilder.Provider=“Microsoft.Jet.OLEDB.4.0”;
ConnectionBuilder.DataSource=ExcelPath;
添加(“扩展属性”、“Excel 8.0”);
返回新的OLEDB连接(ConnectionBuilder.ToString());
}
使用(OleDbConnection Connection=CreateConnection(@“C:\userinfo.xls”))
{
Connection.Open();
OleDbCommand tempCmd=Connection.CreateCommand();
tempCmd.CommandText=CreateTableQury(dt,“Sheet1”);
tempCmd.ExecuteNonQuery();
tempCmd.CommandText=CreateInsertQuery(dt,tempCmd.Parameters,“Sheet1”);
int extime=1;
foreach(数据行中的数据行)
{
对于(int t=0;t
它可能是您在2003年打开的版本。因为当您在2007年打开2003 excel时,它的行数不会超过65K
因此,请将excel保存到2007年,然后再试一次。我猜您必须将excel升级到至少2007版或跨列扩展,然后该文件似乎不适用于2007,userinfo。
**xls**
此外,我认为您需要升级Microsoft.Jet.OLEDB
alsohm。。我有微软Office 2007。。我想我是否有微软的Office excel程序并不重要(如果我使用Micocoft.Office.Interop.excel,我想这很重要),我不明白你的意思?您使用的xls格式适用于具有65K限制的旧版本Excel