Sei sulla pagina 1di 14

Este artculo describe cmo puede utilizar ADO.

NET para recuperar datos de un libro de Microsoft Excel, modificar los datos de un libro existente o agregar datos a un libro nuevo. Para tener acceso a libros de Excel con ADO.NET, puede utilizar el proveedor OLE DB de Jet; en este artculo se proporciona la informacin que necesitan para que pueda utilizar el proveedor OLE DB de Jet cuando Excel es el origen de datos de destino.

Cmo utilizar el proveedor OLE DB de Jet con libros de Microsoft Excel


El motor de base de datos Microsoft Jet puede tener acceso a datos en otros formatos de archivo de base de datos, tales como libros de Excel, a travs de los controladores instalables de mtodo de acceso secuencial indizado (ISAM). Para abrir formatos externos admitidos por el proveedor OLE DB de Microsoft Jet 4.0, especifique el tipo de base de datos en las propiedades extendidas para la conexin. El proveedor OLE DB de Jet admite los siguientes tipos de base de datos de libros de Microsoft Excel: Excel 3.0 Excel 4.0 Excel 5.0 Excel 8.0 Nota: utilice el tipo de base de datos de origen de Excel 5.0 para libros de Microsoft Excel 5.0 y 7.0 (95) y el tipo de base de datos de origen de Excel 8.0 para Microsoft Excel 8.0 (97), 9.0 (2000) y 10.0 libros (2002). Los ejemplos de este artculo utilizan libros de Excel en el formato de Excel 2000 y Excel 2002.

Cadena de conexin Para tener acceso a un libro de Excel utilizando el proveedor OLE DB de Jet, utilice una cadena de conexin que tiene la siguiente sintaxis: Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Book1.xls;Propiedades extendidas = "Excel 8.0;HDR = YES; " En la cadena de conexin, especifique la ruta de acceso y el nombre completo para el libro en el parmetro de Origen de datos . El parmetro Propiedades extendidas puede contener dos propiedades: una propiedad de la versin ISAM y una propiedad para indicar o no la tabla o tablas incluyen encabezados. Con los libros de Excel, la primera fila de un rango es la fila de encabezado (o nombres de campo) de forma predeterminada. Si el primer rango no contiene encabezados, puede especificar HDR = NO en las propiedades extendidas en la cadena de conexin. Si especifica HDR = NO en la cadena de conexin, el proveedor OLE DB de Jet automticamente nombra los campos para usted (F1 representa el primer campo, F2 representa el segundo campo etc.).

Tipos de datos A diferencia de una base de datos tradicional, no hay ninguna forma directa para especificar los tipos de datos para las columnas en tablas de Excel. En su lugar, el proveedor OLE DB explora ocho filas de una columna para estimar el tipo de datos para el campo. Puede cambiar el nmero de filas que desea escanear, especificando un valor entre uno (1) y diecisis (16) para el valor de MAXSCANROWS en las propiedades extendidas de la cadena de conexin.

Convenciones de nomenclatura de la tabla Hay varias formas, puede hacer referencia a una tabla (o rango) en un libro de Excel:

Utilice el nombre de la hoja seguido por un signo de dlar (por ejemplo, [Hoja1$] o [mi hoja de clculo$]). Una tabla de libro que se hace referencia de esta manera incluye el rango utilizado todo de la hoja de clculo. Select * from [Sheet1$]

Utilice un rango con un nombre definido (por ejemplo, [MyNamedRange]): select * from [MyNamedRange]

Utilice un rango con una direccin especfica (por ejemplo, [Hoja1$ A1: B10]): select * from [Sheet1$ A1:B10]

Nota: el signo de dlar despus del nombre de la hoja de clculo es una indicacin de que existe en la tabla. Si va a crear una nueva tabla, como se describe en la seccin crear nuevos libros y las tablas de este artculo, no utilice el signo de dlar.

Cmo utilizar los libros de Excel como fuentes de datos de ADO.NET


Recuperar registros Puede recuperar los registros de una base de datos utilizando uno de estos dos enfoques de ADO.NET: con un Dataset o con un DataReader. Un conjunto de datos es una memoria cach de los registros recuperados de un origen de datos. Los datos en el conjunto de datos suelen ser de una versin mucho ms reducida de lo que hay en la base de datos. Sin embargo, puede trabajar con l en la misma forma que funcionen con los datos reales y estar desconectado de la base de datos real. Adems de

recuperacin de datos, tambin puede utilizar un Dataset para realizar operaciones de actualizacin en la base de datos subyacente. Como alternativa, puede utilizar un DataReader para recuperar una secuencia de slo avance de slo lectura de datos de una base de datos. Cuando utilice el programa de DataReader , un aumento del rendimiento y es la sobrecarga del sistema disminuye porque slo una fila a la vez est siempre en la memoria. Si tiene una gran cantidad de datos que desea recuperar y no va a realizar cambios en la base de datos subyacente, un DataReader es una opcin mejor que un Dataset.

Agregar y actualizar registros Con ADO.NET, puede insertar y actualizar registros en un libro en uno de tres maneras:

Ejecutar directamente un comando para insertar o actualizar registros de uno en uno. Para ello, puede crear un objeto OLEDbCommand en su conexin y establecer su propiedad CommandText en un comando vlido para insertar registros
INSERT INTO [Sheet1$] (F1, F2) values ('111', 'ABC')

o un comando para actualizar registros


UPDATE [Sheet1$] SET F2 = 'XYZ' WHERE F1 = '111'

y, a continuacin, llame al mtodo ExecuteNonQuery . .

Realizar cambios en un conjunto de datos que ha rellenado con una tabla o consulta de un libro de Excel y, a continuacin, llame al mtodo Update del DataAdapter para resolver los cambios del conjunto de datos al libro. Sin embargo, para utilizar el mtodo de actualizacin para el cambio de resolucin que debe establecer comandos parametrizados para de DataAdapter InsertCommand
INSERT INTO [Sheet1$] (F1, F2) values (?, ?)

y UpdateCommand:
UPDATE [Sheet1$] SET F2 = ? WHERE F1 = ?

Se precisan los comandos parametrizado INSERT y UPDATE porque OleDbDataAdapter no proporciona informacin clave o ndice para libros de Excel; sin campos de clave o ndice, CommandBuilder no puede generar los comandos automticamente.

De la exportacin de datos de otros origen de datos en un libro de Excel siempre que el otro origen de datos puede utilizarse con el proveedor OLE DB de Jet. Orgenes de datos que puede utilizar con el proveedor OLE DB de Jet de esta manera incluyen archivos de texto, bases de datos de Microsoft Access y, por supuesto, otros libros de Excel. Con un solo comando INSERT INTO, puede exportar datos de otra tabla o consulta en el libro:
INSERT INTO [Sheet1$] IN 'C:\Book1.xls' 'Excel 8.0;' SELECT * FROM MyTable"

INSERT INTO requiere que la tabla de destino (o la hoja de clculo) ya existe; datos se anexan a la tabla de destino. Tambin puede utilizar SELECT...INTO para exportar la tabla o consulta a un libro:
SELECT * INTO [Excel 8.0;Database=C:\Book1.xls].[Sheet1] FROM [MyTable]

Cuando se usa SELECT...EN, si la tabla de destino o el libro no existe, se crear para usted. Si la tabla ya existe antes de la seleccin...EN se emite el comando, se producir un error. La seccin de Cdigo de ejemplo ms adelante en este artculo ilustra cada uno de estos mtodos para agregar y actualizar registros en un libro.

Eliminar registros Aunque el proveedor OLE DB de Jet permite insertar y actualizar registros en un libro de Excel, no permite las operaciones de eliminacin. Si se intenta realizar una operacin de eliminacin de uno o ms registros, recibir el mensaje de error siguiente: Este ISAM no admite la eliminacin de datos en una tabla vinculada. Esta limitacin es inherente en el tratamiento de los libros de Excel como bases de datos.

Crear tablas y libros Para crear una tabla en un libro de Excel, ejecute el comando CREATE TABLE:
CREATE TABLE Sheet1 (F1 char(255), F2 char(255))

Al ejecutar este comando, se crea una nueva hoja de clculo con el nombre de la tabla que se especifique en el comando. Si el libro para la conexin no existe, se tambin se crear. La seccin Ejemplo de cdigo muestra cmo puede utilizar el comando CREATE TABLE para crear un nuevo libro y una tabla.

Paso a paso
Cdigo de ejemplo 1. Inicie un nuevo proyecto de Aplicacin para Windows de Visual Basic .NET. . De forma predeterminada, se crea Form1 . . 2. Agregue seis controles RadioButton y un control Button a Form1. 3. Seleccione todos los controles RadioButton y establezca la propiedad Size en 200,24. 4. En el men Ver , haga clic en cdigo. 5. Agregue la siguiente lnea al principio del mdulo de cdigo:
Imports System.Data.OleDb

6. Inserte el siguiente cdigo en la clase de formulario : :


7. Private m_sConn1 As String = "Provider=Microsoft.Jet.OLEDB.4.0;" & _ 8. "Data Source=C:\ExcelData1.xls;" & _ 9. "Extended Properties=""Excel 8.0;HDR=YES""" 10. 11. Private m_sConn2 As String = "Provider=Microsoft.Jet.OLEDB.4.0;" & _ 12. "Data Source=C:\ExcelData2.xls;" & _ 13. "Extended Properties=""Excel 8.0;HDR=YES""" 14. 15. Private m_sNorthwind = _ 16. "C:\Program Files\Microsoft Office\Office10\Samples\Northwind.mdb" 17. 18. Private m_sAction As String 19. 20. Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load 21. RadioButton1.Text = "Create_Workbook" 22. RadioButton2.Text = "Retrieve_Records" 23. RadioButton3.Text = "Add_Records" 24. RadioButton4.Text = "Update_Records" 25. RadioButton5.Text = "Update_Individual_Cells" 26. RadioButton6.Text = "Use_External_Source" 27. Button1.Text = "Go!" 28. End Sub 29. 30. Private Sub RadioButtons_Click(ByVal sender As Object, ByVal e As System.EventArgs) _ 31. Handles RadioButton1.Click, RadioButton2.Click, RadioButton3.Click, _ 32. RadioButton4.Click, RadioButton5.Click, RadioButton6.Click 33. m_sAction = sender.Text'Store the text for the selected radio button

34. End Sub 35. 36. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click 37. Try 38. ' Call the associated routine to add/update/modify the workbook. 39. Select Case m_sAction 40. Case "Create_Workbook" : Create_Workbook() 41. Case "Retrieve_Records" : Retrieve_Records() 42. Case "Add_Records" : Add_Records() 43. Case "Update_Records" : Update_Records() 44. Case "Update_Individual_Cells" : Update_Individual_Cells() 45. Case "Use_External_Source" : Use_External_Source() 46. End Select 47. 48. Catch ex As OleDbException 49. Dim er As OleDbError 50. For Each er In ex.Errors 51. MsgBox(er.Message) 52. Next 53. Catch ex2 As System.InvalidOperationException 54. MsgBox(ex2.Message) 55. End Try 56. 57. 58. End Sub 59. 60. Public Sub Create_Workbook() 61. 62. ' If the workbooks already exist, prompt to delete. 63. Dim answer As MsgBoxResult 64. If Dir("C:\ExcelData1.xls") <> "" Or Dir("C:\ExcelData2.xls") <> "" Then 65. answer = MsgBox("Delete existing workbooks (C:\ExcelData1.xls and " & _ 66. "C:\ExcelData2.xls)?", MsgBoxStyle.YesNo) 67. If answer = MsgBoxResult.Yes Then 68. If Dir("C:\ExcelData1.xls") <> "" Then Kill("C:\ExcelData1.xls") 69. If Dir("C:\ExcelData2.xls") <> "" Then Kill("C:\ExcelData2.xls") 70. Else 71. Exit Sub 72. End If 73. End If 74. 75. '================================================================= ========= 76. ' Create a workbook with a table named EmployeeData. The table has 3 77. ' fields: ID (char 255), Name (char 255) and Birthdate (date). 78. '================================================================= ========= 79. Dim conn As New OleDbConnection()

80. 81. 82. 83. 84.

conn.ConnectionString = m_sConn1 conn.Open() Dim cmd1 As New OleDbCommand() cmd1.Connection = conn cmd1.CommandText = "CREATE TABLE EmployeeData (Id char(255), Name char(255), BirthDate date)" 85. cmd1.ExecuteNonQuery() 86. cmd1.CommandText = "INSERT INTO EmployeeData (Id, Name, BirthDate) values ('AAA', 'Andrew', '12/4/1955')" 87. cmd1.ExecuteNonQuery() 88. conn.Close() 89. 90. '================================================================= ========= 91. ' Create a workbook with a table named InventoryData. The table has 3 92. ' fields: Product (char 255), Qty (float) and Price (currency). 93. '================================================================= ========= 94. 95. conn.ConnectionString = m_sConn2 96. conn.Open() 97. Dim cmd2 As New OleDbCommand() 98. cmd2.Connection = conn 99. cmd2.CommandText = "CREATE TABLE InventoryData (Product char(255), Qty float, Price currency)" 100. cmd2.ExecuteNonQuery() 101. cmd2.CommandText = "INSERT INTO InventoryData (Product, Qty, Price) values ('Cola', 200, 1.35)" 102. cmd2.ExecuteNonQuery() 103. cmd2.CommandText = "INSERT INTO InventoryData (Product, Qty, Price) values ('Chips', 550, 0.89)" 104. cmd2.ExecuteNonQuery() 105. conn.Close() 106. 107. ' NOTE: You can ALTER and DROP tables in a similar fashion. 108. 109. End Sub 110. 111. Public Sub Retrieve_Records() 112. 113. '========================================================== 114. 'Use a DataReader to read data from the EmployeeData table. 115. '========================================================== 116. 117. Dim conn1 As New System.Data.OleDb.OleDbConnection(m_sConn1) 118. conn1.Open() 119. Dim cmd1 As New System.Data.OleDb.OleDbCommand("Select * From [EmployeeData$]", conn1) 120. Dim rdr As OleDbDataReader = cmd1.ExecuteReader 121. 122. Debug.WriteLine(vbCrLf & "EmployeeData:" & vbCrLf & "=============") 123. Do While rdr.Read() 124. Debug.WriteLine(System.String.Format("{0,-10}{1, 15}{2}", _

125. rdr.GetString(0), rdr.GetString(1), _ 126. rdr.GetDateTime(2).ToString("d"))) 127. Loop 128. rdr.Close() 129. conn1.Close() 130. 131. '======================================================== 132. 'Use a DataSet to read data from the InventoryData table. 133. '======================================================== 134. Dim conn2 As New OleDbConnection(m_sConn2) 135. Dim da As New OleDbDataAdapter("Select * From [InventoryData$]", conn2) 136. Dim ds As DataSet = New DataSet() 137. da.Fill(ds) 138. Debug.WriteLine(vbCrLf & "InventoryData:" & vbCrLf & "==============") 139. Dim dr As DataRow 140. For Each dr In ds.Tables(0).Rows'Show results in output window 141. Debug.WriteLine(System.String.Format("{0,-15}{1, -6}{2}", _ 142. dr("Product"), dr("Qty"), dr("Price"))) 143. Next 144. conn2.Close() 145. 146. End Sub 147. 148. Public Sub Add_Records() 149. 150. '================================================================= ========= 151. ' Run an INSERT INTO command to add new records to the workbook. 152. '================================================================= ========= 153. Dim conn1 As New System.Data.OleDb.OleDbConnection(m_sConn1) 154. conn1.Open() 155. Dim cmd As New System.Data.OleDb.OleDbCommand() 156. cmd.Connection = conn1 157. cmd.CommandText = "INSERT INTO [EmployeeData$] (ID, Name, BirthDate) values ('CCC', 'Charlie', '10/14/48')" 158. cmd.ExecuteNonQuery() 159. cmd.CommandText = "INSERT INTO [EmployeeData$] (ID, Name, BirthDate) values ('DDD', 'Deloris', '7/19/98')" 160. cmd.ExecuteNonQuery() 161. conn1.Close() 162. 163. '================================================================== == 164. 'Use the InsertCommand object to add new records to the InventoryData 165. 'table. 166. '================================================================== == 167. Dim conn2 As New OleDbConnection(m_sConn2)

168. Dim da As New OleDbDataAdapter("Select * From [InventoryData$]", conn2) 169. Dim ds As DataSet = New DataSet() 170. da.Fill(ds, "MyExcelTable") 171. 172. ' Generate the InsertCommand and add the parameters for the command. 173. da.InsertCommand = New OleDbCommand( _ 174. "INSERT INTO [InventoryData$] (Product, Qty, Price) VALUES (?, ?, ?)", conn2) 175. da.InsertCommand.Parameters.Add("@Product", OleDbType.VarChar, 255, "Product") 176. da.InsertCommand.Parameters.Add("@Qty", OleDbType.Double).SourceColumn = "Qty" 177. da.InsertCommand.Parameters.Add("@Price", OleDbType.Currency).SourceColumn = "Price" 178. 179. ' Add two new records to the dataset. 180. Dim dr As DataRow 181. dr = ds.Tables(0).NewRow 182. dr("Product") = "Bread" : dr("Qty") = 390 : dr("Price") = 1.89 : ds.Tables(0).Rows.Add(dr) 183. dr = ds.Tables(0).NewRow 184. dr("Product") = "Milk" : dr("Qty") = 99 : dr("Price") = 2.59 : ds.Tables(0).Rows.Add(dr) 185. 186. ' Apply the dataset changes to the actual data source (the workbook). 187. da.Update(ds, "MyExcelTable") 188. conn2.Close() 189. 190. End Sub 191. 192. Public Sub Update_Records() 193. 194. '================================================================= ========= 195. ' Run an UPDATE command to change a record in the EmployeeData 196. ' table. 197. '================================================================= ========= 198. Dim conn1 As New System.Data.OleDb.OleDbConnection(m_sConn1) 199. conn1.Open() 200. Dim cmd As New System.Data.OleDb.OleDbCommand() 201. cmd.Connection = conn1 202. cmd.CommandText = "UPDATE [EmployeeData$] " & _ 203. "SET NAME = 'Aaron', BirthDate = '5/4/1975' WHERE ID = 'AAA'" 204. cmd.ExecuteNonQuery() 205. conn1.Close() 206. 207. '================================================================== == 208. ' Use the UpdateCommand object to modify records in the InventoryData

209. ' table. 210. '================================================================== == 211. Dim conn2 As New OleDbConnection(m_sConn2) 212. Dim da As New OleDbDataAdapter("Select * From [InventoryData$]", conn2) 213. Dim ds As DataSet = New DataSet() 214. da.Fill(ds, "MyInventoryTable") 215. 216. ' Generate the UpdateCommand and add the parameters for the command. 217. da.UpdateCommand = New OleDbCommand( _ 218. "UPDATE [InventoryData$] SET Qty = ?, Price=? WHERE Product = ?", conn2) 219. da.UpdateCommand.Parameters.Add("@Qty", OleDbType.Numeric).SourceColumn = "Qty" 220. da.UpdateCommand.Parameters.Add("@Price", OleDbType.Currency).SourceColumn = "Price" 221. da.UpdateCommand.Parameters.Add("@Product", OleDbType.VarChar, 255, "Product") 222. 223. ' Update the first two records. 224. ds.Tables(0).Rows(0)("Qty") = 1000 225. ds.Tables(0).Rows(0)("Price") = 10.1 226. ds.Tables(0).Rows(1)("Qty") = 2000 227. ds.Tables(0).Rows(1)("Price") = 20.2 228. 229. ' Apply the dataset changes to the actual data source (the workbook). 230. da.Update(ds, "MyInventoryTable") 231. conn2.Close() 232. 233. End Sub 234. 235. Public Sub Update_Individual_Cells() 236. 237. '================================================================= ========= 238. ' Update individual cells on the EmployeeData worksheet; 239. ' specifically, cells F3, G3, and I4 are modified. 240. '================================================================= ========= 241. 242. ' NOTE: The connection string indicates that the table does *NOT* 243. ' have a header row. 244. Dim conn As New System.Data.OleDb.OleDbConnection(m_sConn1.Replace("HDR=YES", "HDR=NO")) 245. conn.Open() 246. Dim cmd As New System.Data.OleDb.OleDbCommand() 247. cmd.Connection = conn 248. cmd.CommandText = "UPDATE [EmployeeData$F3:G3] SET F1 = 'Cell F3', F2 = 'Cell G3'" 249. cmd.ExecuteNonQuery()

250. cmd.CommandText = "UPDATE [EmployeeData$I4:I4] SET F1 = 'Cell I4'" 251. cmd.ExecuteNonQuery() 252. conn.Close() 253. 254. End Sub 255. 256. Public Sub Use_External_Source() 257. 258. ' Open a connection to the sample Northwind Access database. 259. Dim conn As New System.Data.OleDb.OleDbConnection( _ 260. "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & m_sNorthwind & ";") 261. conn.Open() 262. Dim cmd As New System.Data.OleDb.OleDbCommand() 263. cmd.Connection = conn 264. 265. '================================================================= ====== 266. ' Run an INSERT..INTO command on the Northwind database to append 267. ' the records from a table/query to an existing table in the Excel 268. ' workbook. 269. '================================================================= ====== 270. cmd.CommandText = "INSERT INTO [EmployeeData$] IN 'C:\ExcelData1.xls' 'Excel 8.0;'" & _ 271. "SELECT EmployeeID AS ID, FirstName AS Name, BirthDate FROM Employees" 272. cmd.ExecuteNonQuery() 273. 274. '================================================================= ========= 275. ' Run a SELECT..INTO command on the Northwind database to insert 276. ' all the records from a table/query into a new sheet in the Excel 277. ' workbook. 278. '================================================================= ========= 279. cmd.CommandText = "SELECT * INTO [Excel 8.0;Database=C:\ExcelData2.xls].[ProductSales]" & _ 280. "FROM [Product Sales for 1997]" 281. cmd.ExecuteNonQuery() 282. 283. conn.Close() 284. End Sub

285. Modifique la ruta de acceso a la base de datos de Access de ejemplo, Northwind, para el miembro de m_sNorthwind en el cdigo, si es necesario. Prubelo

1. En el men Ver , elija Otras ventanasy, a continuacin, haga clic en resultados para mostrar la ventana de salida . . 2. Presione F5 para compilar y ejecutar el programa. 3. Haga clic en Create_Workbook y, a continuacin, haga clic en Ir. El procedimiento Create_Workbook ejecuta los comandos CREATE TABLE para crear dos nuevos libros: C:\ExcelData1.xls y C:\ExcelData2.xls. ExcelData1.xls contiene una sola hoja (tabla), denominada EmployeeData y ExcelData2.xls contiene una sola hoja (tabla) denominada InventoryData. Las tablas se rellenan con los registros. Nota: en cada paso restante en esta prueba, abra los libros en Excel para examinar los resultados. O bien, haga clic en Retrieve_Records para ver el contenido de la tabla o tablas en la salida de ventana de Visual Studio .NET. 4. Haga clic en Retrieve_Records y, a continuacin, haga clic en Ir. El procedimiento Retrieve_Records extrae los registros de las tablas y los muestra en la ventana de resultados similar al siguiente:
5. EmployeeData: 6. ============= 7. AAA Andrew 12/4/1955 8. 9. InventoryData: 10. ============== 11. Cola 200 1.35 Chips 550 0.89

12. Haga clic en Add_Records y, a continuacin, haga clic en Ir. La rutina Add_Records agrega dos registros a cada tabla:
13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. EmployeeData: ============= AAA Andrew CCC Charlie DDD Deloris InventoryData: ============== Cola 200 1.35 Chips 550 0.89 Bread 390 1.89 Milk 99 2.59 12/4/1955 10/14/1948 7/19/1998

24. Haga clic en Update_Records y, a continuacin, haga clic en Ir. La rutina Update_Records actualiza dos registros en cada libro:
25. 26. 27. 28. 29. 30. 31. 32. 33. 34. EmployeeData: ============= AAA Aaron CCC Charlie DDD Deloris InventoryData: ============== Cola 1000 Chips 2000 5/4/1975 10/14/1948 7/19/1998

10.1 20.2

35. Bread Milk

390 1.89 99 2.59

36. Haga clic en Update_Individual_Cells y, a continuacin, haga clic en Ir. La rutina Update_Individual_Cells modifica determinadas celdas de la hoja de clculo EmployeeData ExcelData1.xls; en concreto, se actualizan las celdas F3, G3 y I4. 37. Haga clic en Use_External_Source y, a continuacin, haga clic en Ir. Cuando se utiliza una instruccin INSERT...EN el comando, la rutina Use_External_Source anexa registros de la tabla Northwind 'Empleados' en la hoja de clculo EmployeeData ExcelData1.xls. Y Use_External_Source utiliza una instruccin SELECT...EN el comando para crear una nueva tabla (o la hoja) en ExcelData2.xls que contiene todos los registros de Neptuno tabla productos. Nota: si hace clic en Use_External_Source ms de una vez, la lista de empleados se anexar varias veces porque la clave principal no se reconoce o forzada.

Formato de celdas
Si utiliza ADO.NET para agregar o actualizar registros en un libro existente, puede aplicar formato al libro que se utilizar con los registros nuevos o actualizados de celdas. Al actualizar un registro existente (o fila) en un libro, se conserva el formato de celda. Y cuando se inserta un nuevo registro (o fila) en un libro, el nuevo registro hereda el formato de la fila por encima de l. El siguiente procedimiento muestra cmo puede utilizar el formato de un libro con el cdigo de ejemplo: 1. 2. 3. 4. 5. 6. 7. 8. 9. Presione F5 para compilar y ejecutar el ejemplo. En Form1, haga clic en Create_Workbook y, a continuacin, haga clic en Ir. Inicie Microsoft Excel y abra C:\ExcelData1.xls. Aplicar un estilo de fuente en negrita a la celda A2. Aplicar una cursiva, subrayado estilo a la celda B2 y alinear en el centro. Aplicar un formato de fecha larga a la celda C2. Guarde y cierre C:\ExcelData1.xls. En Form1, haga clic en Add_Records y, a continuacin, haga clic en Ir. Abra C:\ExcelData1.xls en Excel y tenga en cuenta que las dos nuevas filas han heredado el formato de la primera fila.

Limitaciones
stas son algunas limitaciones del proveedor de Jet OLE DB con respecto a los orgenes de datos de Excel:

No se puede insertar las frmulas en las celdas utilizando ADO.NET. El proveedor OLE DB de Jet es incapaz de proporcionar informacin clave o ndice para las tablas de un libro de Excel. Por este motivo, no se puede usar

CommandBuilder para generar automticamente las actualizaciones e inserciones de registros en un libro de Excel.

Potrebbero piacerti anche