<pedrocorreia.net ⁄>
corner
<mySearch ⁄> <mySearch ⁄>

corner
 
corner
<mySnippets order="rand" ⁄> <mySnippets order="rand" ⁄>

corner
 
corner
<myContacts ⁄> <myContacts ⁄>

<email ⁄>


pc@pedrocorreia.net

<windows live messenger ⁄>


pedrojacorreia@hotmail.com

<myCurriculum type="pdf" ⁄>


Download
corner
 
corner
<myBlog show="last" ⁄> <myBlog show="last" ⁄>

corner
 
corner
<myNews show="rand" ⁄> <myNews show="rand" ⁄>

corner
 
corner
<myNews type="cat" ⁄> <myNews type="cat" ⁄>

corner
 
corner
<myQuote order="random" ⁄> <myQuote order="random" ⁄>

corner
 
corner
<myPhoto order="random" ⁄> <myPhoto order="random" ⁄>

<pedrocorreia.net ⁄>
corner
 
corner
<myAdSense ⁄> <myAdSense ⁄>

corner
 
corner
<myVisitorsMap ⁄> <myVisitorsMap ⁄>

corner
 
 

<Actualizar Valores no Excel ⁄ >




clicks: 11381 11381 2007-05-11 2007-05-11 goto mySnippets mySnippets asp.net  Download  Bookmark This Bookmark This



Este snippet é a continuação de um snippet anterior em que era exemplificada uma possivel maneira de inserir valores numa folha de cálculo (xls), este snippet irá focar a actualização desses mesmos dados, isto é, partimos do principio de que os dados já existem, já foram inseridos manualmente ou através de outros processos (como por exemplo neste snippet que já tinha mencionado anteriormente) o que queremos agora é alterar alguma(s) informação(ões), por exemplo o cliente mudou de telefone, tem um e-mail nome, etc, etc.

A abordagem a ser levada em conta é praticamente a mesma. Imaginemos que estamos a trabalhar com dados tabulares (base de dados).
Supondo que temos uma maneira de identificar univocamente o registo que queremos actualizar, por ex. no snippet anterior existia um campo, coluna, chamada "id", vulgo primary key. Este snippet encontra-se "limitado" a uma cláusula de restrição, porém o código é facilmente modificado para que exista uma maior flexibilidade.


A página de teste poderá ser igual:
  1. <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default2.aspx.cs" Inherits="Default2" %>
  2. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  3. <html xmlns="http://www.w3.org/1999/xhtml" >
  4. <head runat="server">
  5. <title>Inserir Valores num Ficheiro Excel</title>
  6. </head>
  7. <body>
  8. <form id="form1" runat="server">
  9. <div>
  10. <asp:Label ID="lblResult" runat="server" Text="Label"></asp:Label>
  11. </div>
  12. </form>
  13. </body>
  14. </html>
  15.  



Na nossa página code-behind, é muito semelhante também, mas existem algumas alterações, como por exemplo no ArrayList de valores de campos e na criação do objecto:
  1. using System;
  2. using System.Data;
  3. using System.Configuration;
  4. using System.Collections;
  5. using System.Web;
  6. using System.Web.Security;
  7. using System.Web.UI;
  8. using System.Web.UI.WebControls;
  9. using System.Web.UI.WebControls.WebParts;
  10. using System.Web.UI.HtmlControls;
  11.  
  12. public partial class Default2 : System.Web.UI.Page {
  13. protected void Page_Load(object sender, EventArgs e) {
  14. string xlsFilename = Server.MapPath("~/teste/teste.xls");
  15. string xlsSheetName = "MySheet";
  16. ArrayList xlsFields = new ArrayList();
  17. ArrayList xlsValues = new ArrayList();
  18.  
  19. //dummy data for update
  20. xlsFields.Add("nome");
  21. xlsFields.Add("morada");
  22. xlsFields.Add("telefone");
  23.  
  24. xlsValues.Add("http://www.pedrocorreia.net/mySnippets");
  25. xlsValues.Add("Morada de Exemplo 1");
  26. xlsValues.Add("98 765 43 21");
  27. //
  28.  
  29. try {
  30. Excel xls = new Excel(xlsFilename, xlsSheetName,"id","1", xlsValues, xlsFields);
  31. xls.ExcelUpdateRow();
  32. lblResult.Text = "Ficheiro actualizado com sucesso";
  33. }
  34. catch (Exception ex){
  35. //nota: deverá ser feito outro tipo de tratamento ...
  36. lblResult.Text="Ocorreu o seguinte erro: " + (ex.Message.ToString());
  37. }
  38. }
  39. }



A class responsável pelo comunicação com o xls e a actualização dos dados será esta (deverá residir na pasta especial App_Code), também é semelhante, porém existem mais 2 atributos, o método construtor tem 1 overload e existe o método para a inserção de dados (para não baralhar só coloquei o método construtor que diz respeito à actualização de dados).
  1. using System;
  2. using System.Data;
  3. using System.Configuration;
  4. using System.Web;
  5. using System.Web.Security;
  6. using System.Web.UI;
  7. using System.Web.UI.WebControls;
  8. using System.Web.UI.WebControls.WebParts;
  9. using System.Web.UI.HtmlControls;
  10.  
  11. using System.Data.OleDb;
  12. using System.Text;
  13. using System.Collections;
  14.  
  15. /// <summary>
  16. /// Class Excel
  17. /// </summary>
  18. public class Excel {
  19. private string _filename;
  20. private string _sheetName;
  21. private int _numFields;
  22. private ArrayList _fields;
  23. private ArrayList _values;
  24.  
  25. private string _filterField;
  26. private string _filterValue;
  27.  
  28. /// <summary>
  29. /// Método construtor (actualizar dados)
  30. /// </summary>
  31. /// <param name="filename">Nome do ficheiro</param>
  32. /// <param name="sheetName">Nome da Sheet (folha do excel)</param>
  33. /// <param name="filterField">Campo de Filtro</param>
  34. /// <param name="filterValue">Valor do campo de Filtro</param>
  35. /// <param name="values">Valores a inserir</param>
  36. /// <param name="fields">Nome das colunas que definem a estrutura</param>
  37. public Excel(string filename, string sheetName, string filterField, string filterValue, ArrayList values, ArrayList fields) {
  38. if (values.Count != fields.Count) {
  39. throw new Exception("O número de campos tem de coincidir com o número de valores");
  40. }
  41.  
  42. this._numFields = fields.Count;
  43.  
  44. this._filename = filename;
  45. this._sheetName = sheetName;
  46.  
  47. this._values = new ArrayList();
  48. this._values = values;
  49.  
  50. this._fields = new ArrayList();
  51. this._fields = fields;
  52.  
  53. this._filterField = filterField;
  54. this._filterValue = filterValue;
  55. }
  56.  
  57.  
  58. /// <summary>
  59. /// Actualizar valores no ficheiro Excel
  60. /// </summary>
  61. /// <returns>Estado da Operação</returns>
  62. public bool ExcelUpdateRow() {
  63. if (String.IsNullOrEmpty(this._filterField) || String.IsNullOrEmpty(this._filterValue)) {
  64. throw new Exception("FilterField and FilterValue required");
  65. }
  66.  
  67. bool result = true;
  68. StringBuilder sbFields_ValuesParams = new StringBuilder();
  69. string iSQL, auxValor, auxCampo;
  70.  
  71. //criar instrução sql
  72. for (int i = 0; i < this._numFields; i++) {
  73. auxCampo = this._fields[i].ToString();
  74. sbFields_ValuesParams.Append(String.Format("{0}=@{0}", auxCampo)); //campos e parametros
  75.  
  76. if (i < this._numFields - 1) {
  77. sbFields_ValuesParams.Append(", ");
  78. }
  79. }
  80.  
  81. //construir instrução sql de update
  82. iSQL = String.Format("Update [{0}$] set {1} Where {2}=@{2}", this._sheetName, sbFields_ValuesParams.ToString(), this._filterField);
  83. //
  84.  
  85. OleDbConnection myConnection = new OleDbConnection(this.ExcelConnection());
  86. OleDbCommand myCommand = new OleDbCommand(iSQL, myConnection);
  87.  
  88. try {
  89. for (int i = 0; i < this._numFields; i++) {
  90. //preencher valores
  91. auxCampo = this._fields[i].ToString();
  92. auxValor = this._values[i].ToString();
  93. myCommand.Parameters.Add(new OleDbParameter(String.Format("@{0}", auxCampo), auxValor));
  94. }
  95.  
  96. //parametro de restrição
  97. myCommand.Parameters.Add(new OleDbParameter(String.Format("@{0}", this._filterField), this._filterValue));
  98.  
  99. myConnection.Open();
  100. myCommand.Connection = myConnection;
  101. myCommand.ExecuteNonQuery();
  102. myConnection.Close();
  103. }
  104. catch (Exception ex) {
  105. //tratar da excepção
  106. myCommand.Dispose();
  107. myConnection.Close();
  108. throw new Exception(ex.Message.ToString());
  109. }
  110.  
  111. return result;
  112. }
  113.  
  114. /// <summary>
  115. /// Obter ConnectionString para ligação ao Excel
  116. /// </summary>
  117. /// <returns>ConnectionString</returns>
  118. private string ExcelConnection() {
  119. return @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + this._filename + @";Extended Properties=""Excel 8.0;HDR=Yes;""";
  120. }
  121. }




Qualquer erro/ dúvida é só dizer!









clicks: 11381 11381 2007-05-11 2007-05-11 goto mySnippets mySnippets asp.net  Download  Bookmark This Bookmark This