我有一个带有两个标签的excel表,所以我想从一个标签中获取一行并插入另一个标签,我认为它与sqlserver或mysql中的相同。只需选择并插入..
我正在使用此查询,但它说语法错误,不确定它有什么问题。
testCommand.CommandText = "Insert into [ActiveLicenses$]( Select * from [companies$]
where [License Number] = '" + lnumber + "')";
testCommand.ExecuteNonQuery();
更新
有没有办法直接从excel表中删除行?
答案 0 :(得分:0)
您可以使用SQL从Excel中提取数据:
using (OleDbDataAdapter da = new OleDbDataAdapter(
"SELECT " + columns + " FROM [" + worksheetName + "$]", conn))
{
DataTable dt = new DataTable(tableName);
da.Fill(dt);
ds.Tables.Add(dt);
}
不幸的是,插入excel不会这样。我很确定您无法使用OleDb Insert Command指定要写入的单元格,它将自动转到指定列中的下一个打开行。您可以使用更新语句解决此问题:
sql = "Update [Sheet1$A1:A10] SET A10 = 'YourValue'";
myCommand.CommandText = sql;
myCommand.ExecuteNonQuery();
我个人会使用VSTO而不是oleDB。解压缩单元格后,只需打开包含代码的电子表格并插入数据:
Excel.Workbook wb = xlApp.Workbooks.Open(filePath);
rng = wb.Range["A1"];
rng.Value2 = "data";
答案 1 :(得分:0)
更快的方法。
我将所有许可证都放入DataTable中,并在不到1分钟的时间内删除不需要的许可证。然后只需将DataTable导出到Csv,这样我就可以在不到1分钟的时间内准备好文件。
以下示例:
static List<string> licensecAll = new List<string>();
DataTable dt = new DataTable();
OleDbDataAdapter dp = new OleDbDataAdapter("select * from [companies$]", testCnn);
dp.Fill(dt);
if (dt.Rows.Count > 0)
{
for (int i = dt.Rows.Count-1; i >= 0; i--)
{
string lnum = dt.Rows[i][0].ToString();
Console.WriteLine("LICENSE NUMBER" + lnum);
if (!licensecAll.Contains(lnum))
{
Console.WriteLine("ROW REMOVED");
dt.Rows.RemoveAt(i);
}
}
}
然后只需将数据表运行到csv ....
public static void DataTable2CSV(DataTable table, string filename, string seperateChar)
{
StreamWriter sr = null;
try
{
sr = new StreamWriter(filename);
string seperator = "";
StringBuilder builder = new StringBuilder();
foreach (DataColumn col in table.Columns)
{
builder.Append(seperator).Append(col.ColumnName);
seperator = seperateChar;
}
sr.WriteLine(builder.ToString());
foreach (DataRow row in table.Rows)
{
seperator = "";
builder = new StringBuilder();
foreach (DataColumn col in table.Columns)
{
builder.Append(seperator).Append(row[col.ColumnName]);
seperator = seperateChar;
}
sr.WriteLine(builder.ToString());
}
}
finally
{
if (sr != null)
{
sr.Close();
}
}
}