/// <summary> /// Converte uma planilha para uma <see cref="System.Data.DataTable"/>. /// </summary> /// <returns><see cref="System.Data.DataTable"/> com os dados contidos na planilha.</returns> /// <param name="p_package">Objeto de manipulação de arquivos Excel (XLSX).</param> /// <param name="p_sheet">Objeto de manipulação de planilhas Excel (XLSX).</param> /// <remarks> /// A primeira linha é considerada como nomes de colunas, e todas as células dessa linha devem estar preenchidas. /// Não pode haver linhas em branco acima, ou colunas em branco à esquerda dos dados a serem convertidos. /// </remarks> private System.Data.DataTable SheetToDataTable(Spartacus.ThirdParty.SejExcel.OoXml p_package, Spartacus.ThirdParty.SejExcel.gSheet p_sheet) { System.Data.DataTable v_table; System.Data.DataRow v_row = null; bool v_firstrow = true; bool v_datanode = false; bool v_istext = false; string v_cellcontent; double v_value; int v_col = -1; string v_columncontrol = ""; System.Collections.ArrayList v_columnlist; v_table = new System.Data.DataTable(p_sheet.Name); v_columnlist = new System.Collections.ArrayList(); try { using (System.Xml.XmlReader v_reader = System.Xml.XmlReader.Create(p_sheet.GetStream())) { while (v_reader.Read()) { switch (v_reader.NodeType) { case System.Xml.XmlNodeType.Element: v_datanode = false; switch (v_reader.Name) { case "row": if (! v_firstrow) { v_row = v_table.NewRow(); v_col = -1; } break; case "c": v_istext = false; while (v_reader.MoveToNextAttribute()) { if (v_reader.Name == "t") { if (v_reader.Value == "s") v_istext = true; } else { if (v_reader.Name == "r") { if (v_reader.Value.Length > 1) { v_columncontrol = v_reader.Value; v_col++; } } } } break; case "v": v_datanode = true; break; default: break; } break; case System.Xml.XmlNodeType.EndElement: v_datanode = false; if (v_reader.Name == "row") { if (v_firstrow) v_firstrow = false; else v_table.Rows.Add(v_row); } break; case System.Xml.XmlNodeType.Text: if (v_datanode) { if (v_istext) v_cellcontent = p_package.words [System.Int32.Parse(v_reader.Value)]; else v_cellcontent = v_reader.Value; if (v_firstrow) this.AddColumn(v_columnlist, v_table, v_col, v_columncontrol, v_cellcontent); else { if (double.TryParse(v_cellcontent, System.Globalization.NumberStyles.Any, System.Globalization.CultureInfo.InvariantCulture, out v_value)) v_row [this.ColumnIndex(v_columnlist, v_columncontrol)] = System.Math.Round(v_value, 8).ToString(); else v_row [this.ColumnIndex(v_columnlist, v_columncontrol)] = v_cellcontent; } } break; default: break; } } } } catch (Spartacus.Utils.Exception e) { throw new Spartacus.Utils.Exception("Erro ao converter para DataTable a planilha {0}.", e, p_sheet.Name); } catch (System.Exception e) { throw new Spartacus.Utils.Exception("Erro ao converter para DataTable a planilha {0}.", e, p_sheet.Name); } return v_table; }