2017-04-13 5 views
2

Ich habe zwei Excel-Blätter.So aktualisieren Sie Excel-Blatt mit C#

Dies ist das erste Blatt. enter image description here

Dies ist das zweite Blatt enter image description here

Im ersten Blatt eine Spalte namens Sprache ist, und es ist eine ähnliche Säule in der zweiten Platte. Jetzt möchte ich Sprachdaten vom ersten Blatt zum zweiten Blatt entsprechend ihrer ID.

Unten ist mein Code.

System.Data.OleDb.OleDbConnection MyConnection; 
System.Data.OleDb.OleDbCommand myCommand = new System.Data.OleDb.OleDbCommand(); 
string sql = null; 

MyConnection = new System.Data.OleDb.OleDbConnection(@"provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\consolidated.xls;Extended Properties=Excel 8.0;"); 


MyConnection.Open(); 
myCommand.Connection = MyConnection; 

sql = "Update [second$] set [second$].[Language] =[first$].[Language] where [first$].[ID]= [second$].[ID] "; 
myCommand.CommandText = sql; 
myCommand.ExecuteNonQuery(); 

MyConnection.Close(); 

unten Fehler Anfahrt:

Eine nicht behandelte Ausnahme des Typs 'System.Data.OleDb.OleDbException' in System.Data.dll aufgetreten

Zusätzliche Informationen: kein Wert angegeben für einen oder mehrere erforderliche Parameter.

Ich bin nicht sehr geschickt mit SQL, also könnte meine SQL-Syntax auch falsch sein ... aber ich bin mir nicht sicher.

+0

versuchen HDR = YES; in Ihrer Verbindungszeichenfolge. – Arie

+0

immer noch gleicher Fehler – Resu

+0

Versuchen Sie auch, IMEX = 1; in Ihrer Verbindungszeichenfolge neben HDR = YES; Dieser Fehler tritt häufig auf, wenn OleDb die Spaltenüberschriften nicht ordnungsgemäß aus der ersten Zeile in Ihrem Arbeitsblatt geladen hat. Wenn das nicht funktioniert, versuchen Sie, durch F1, F2, F3 auf die Spalten zu verweisen (das sind die Standardwerte, wenn die richtigen Header nicht geladen wurden), wie hier http://StackOverflow.com/A/24314010/891715 – Arie

Antwort

1

Dies ist das Beste, was ich mit :) einfiel

 var connectionStringBuilder = new System.Data.OleDb.OleDbConnectionStringBuilder(); 
     connectionStringBuilder.DataSource = @"c:\dev\tmp\consolidated.xlsx"; 
     connectionStringBuilder.Provider = "Microsoft.ACE.OLEDB.12.0"; 
     connectionStringBuilder.Add("Extended Properties", "Excel 12.0;"); 

     using (var connection = new System.Data.OleDb.OleDbConnection(connectionStringBuilder.ToString())) 
     { 
      connection.Open(); 
      var updateCommand = connection.CreateCommand(); 
      updateCommand.CommandText = "update [second$] S inner join [first$] F on S.ID = F.ID set S.Language = F.Language"; 
      updateCommand.ExecuteNonQuery(); 
     } 
+0

Was ist "S" hier? – Resu

+0

Weitere Informationen: Syntaxfehler (fehlender Operator) im Abfrageausdruck 'F. [Sprache] von [scada $] S JOIN [konsolidiert $] F auf F. [ID] = S. [ID]'. , gib es Fehler :( – Resu

+0

Siehe meine aktualisierte Antwort, die Syntax ist etwas anders –