<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
 
 

<Inserir Valores no Excel ⁄ >




clicks: 15946 15946 2007-05-08 2007-05-08 goto mySnippets mySnippets asp.net  Download  Bookmark This Bookmark This



As folhas de cálculo, tão amplamente conhecidas pelo software Excel da Microsoft, são das ferramentas mais poderosas de suites *Office (sejam elas Microsoft*, Open*, Star*, [your suite here ...]). Este snippet visa a inserção de dados num ficheiro desse tipo (.xls).

Além da possivel necessidade de termos os dados num ficheiro xls para efectuarmos o tratamento dos mesmos, poderemos também ter por exemplo um template de um ficheiro excel (com gráficos, textos, pivot-tables, etc, etc.) e apenas queremos "alimentar" esse ficheiro com dados novos, mas mantendo a estrutura do template, podemos por exemplo adicionar um sheet, a qual irá conter todos os valores, aos quais outra sheet com os gráficos, etc, etc, irá buscar os valores (talvez seja um pouco confuso de explicar ...), suponhamos que temos uma sheet (folha) com o nome [Graficos], os gráficos presentes nessa sheet poderão ir buscar os valores a outra sheet, por exemplo [MyValuesSheet], isto faz com que basta alterarmos os valores da [MyValuesSheet] para que os gráficos automaticamente fiquem actualizados (como todos sabem ;)) , e é aqui que entra a finalidade deste snippet, preencher essa sheet com os valores que pretendemos.

Para que este snippet funcione correctamente termos de preparar o ficheiro Excel previamente:
- 1º - o nome da sheet - é necessário, pois irá informar para onde irão ser armazenados os valores;
- 2º - o nome das colunas - é necessário, pois irá informar qual a ordem como os valores são inseridos;

Vejam isto como se de uma base de dados normal se tratasse, a sheet será o nome da tabela, o nome das colunas será o nome dos campos que constituem a tabela.
Neste exemplo é utilizada a seguinte estrutura:
- MySheet(id, nome, morada, telefone);

Logo no ficheiro xls, dentro da sheet [MySheet], terá de ser criado 4 campos (ou se quiserem chamar cabeçalhos) : na célula "A1" inserimos o nome do campo "id"; B1="nome"; C1="morada"; D1="telefone"; ... and so on, and so on ... (os nomes não levam as "")


Uma página simples com um label (somente usado para mostrar o resultado da operação, se teve ou não sucesso), é o q.b. para este snippet (utilizei code-behind files, mas tal não é necessário)
  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, vamos criar uns valores quaisquer para inserir e poderá ter as seguintes instruções:
  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
  20. xlsFields.Add("id");
  21. xlsFields.Add("nome");
  22. xlsFields.Add("morada");
  23. xlsFields.Add("telefone");
  24.  
  25. xlsValues.Add("1");
  26. xlsValues.Add("pedrocorreia.net");
  27. xlsValues.Add("Morada de Exemplo");
  28. xlsValues.Add("12 345 67 89");
  29. //
  30.  
  31. try {
  32. Excel xls = new Excel(xlsFilename, xlsSheetName, xlsValues, xlsFields);
  33. xls.ExcelInsertRow();
  34. lblResult.Text = "Ficheiro actualizado com sucesso";
  35. }
  36. catch (Exception ex){
  37. //nota: deverá ser feito outro tipo de tratamento ...
  38. lblResult.Text="Ocorreu o seguinte erro: " + (ex.Message.ToString());
  39. }
  40. }
  41. }
  42.  



A class responsável pelo comunicação com o xls e a inserção dos dados será esta (deverá residir na pasta especial App_Code):
  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. /// <summary>
  26. /// Método construtor (inserção de dados)
  27. /// </summary>
  28. /// <param name="filename">Nome do ficheiro</param>
  29. /// <param name="sheetName">Nome da Sheet (folha do excel)</param>
  30. /// <param name="values">Valores a inserir</param>
  31. /// <param name="fields">Nome das colunas que definem a estrutura</param>
  32. public Excel(string filename, string sheetName, ArrayList values, ArrayList fields) {
  33. if (values.Count != fields.Count) {
  34. throw new Exception("O número de campos tem de coincidir com o número de valores");
  35. }
  36.  
  37. this._numFields = fields.Count;
  38.  
  39. this._filename = filename;
  40. this._sheetName = sheetName;
  41.  
  42. this._values = new ArrayList();
  43. this._values = values;
  44.  
  45. this._fields = new ArrayList();
  46. this._fields = fields;
  47.  
  48. }
  49.  
  50. /// <summary>
  51. /// Inserir valores no ficheiro Excel
  52. /// </summary>
  53. /// <returns>Estado da Operação</returns>
  54. public bool ExcelInsertRow() {
  55. bool result = true;
  56. StringBuilder sbFields = new StringBuilder();
  57. StringBuilder sbValuesParams = new StringBuilder();
  58. string iSQL, auxValor, auxCampo;
  59.  
  60. //criar instrução sql
  61. sbFields.Append("(");
  62. sbValuesParams.Append("(");
  63.  
  64. for (int i = 0; i < this._numFields; i++) {
  65. auxCampo = this._fields[i].ToString();
  66. sbFields.Append(auxCampo); //campos
  67. sbValuesParams.Append(String.Format("@{0}", auxCampo)); //parametros
  68.  
  69. if (i < this._numFields - 1) {
  70. sbFields.Append(", ");
  71. sbValuesParams.Append(", ");
  72. }
  73. }
  74. sbFields.Append(")");
  75. sbValuesParams.Append(")");
  76.  
  77. //construir instrução sql de insert
  78. iSQL = String.Format("Insert Into [{0}$] {1} Values {2}", this._sheetName, sbFields.ToString(), sbValuesParams.ToString());
  79. //
  80.  
  81. OleDbConnection myConnection = new OleDbConnection(this.ExcelConnection());
  82. OleDbCommand myCommand = new OleDbCommand(iSQL, myConnection);
  83.  
  84. try {
  85. for (int i = 0; i < this._numFields; i++) {
  86. //preencher valores
  87. auxCampo = this._fields[i].ToString();
  88. auxValor = this._values[i].ToString();
  89. myCommand.Parameters.Add(new OleDbParameter(String.Format("@{0}", auxCampo), auxValor));
  90. }
  91.  
  92. myConnection.Open();
  93. myCommand.Connection = myConnection;
  94. myCommand.ExecuteNonQuery();
  95. myConnection.Close();
  96. }
  97.  
  98. catch (Exception ex) {
  99. //tratar da excepção
  100. myCommand.Dispose();
  101. myConnection.Close();
  102. throw new Exception(ex.Message.ToString());
  103. result = false;
  104. }
  105.  
  106. return result;
  107. }
  108.  
  109. /// <summary>
  110. /// Obter ConnectionString para ligação ao Excel
  111. /// </summary>
  112. /// <returns>ConnectionString</returns>
  113. private string ExcelConnection() {
  114. return @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + this._filename + @";Extended Properties=""Excel 8.0;HDR=Yes;""";
  115. }
  116. }
  117.  






Qualquer erro/ dúvida, é só dizer!









clicks: 15946 15946 2007-05-08 2007-05-08 goto mySnippets mySnippets asp.net  Download  Bookmark This Bookmark This