using System.Xml.Serialization;
using System.Collections.Generic;
using System.Data.SqlClient;
using System.Data.SqlTypes;
public static void Main()
var caminhoPlanilha = "";
var arquivoExcel = new LinqToExcel.ExcelQueryFactory(caminhoPlanilha);
SalvarDadosPlanilha(ExcelParaPlanilha(arquivoExcel));
Console.WriteLine("Hello World");
public static void SalvarDadosPlanilha(Planilha dadosPlanilha)
var paramXmlPlanilha = new SqlParameter("@xmlPlanilha", System.Data.SqlDbType.Xml)
Value = new SqlXml(new MemoryStream(Encoding.UTF8.GetBytes(Serializar(dadosPlanilha, new Dictionary<string, string>()
{"xs1", "http://www.w3.org/2001/XMLSchema"},
{"xsi1", "http://www.w3.org/2001/XMLSchema-instance"}
using (SqlConnection conn = new SqlConnection(""))
using (var cmd = conn.CreateCommand())
cmd.CommandText = "PROC";
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add(paramXmlPlanilha);
public static string Serializar(object objeto, Dictionary<string, string> namespaces = null)
var xmlSerializer = new XmlSerializer(objeto.GetType());
using (StringWriter sw = new StringWriter())
XmlWriter xmlW = XmlWriter.Create(sw, new XmlWriterSettings
Indent = false, OmitXmlDeclaration = true
XmlSerializerNamespaces xmlNamespaces = new XmlSerializerNamespaces();
foreach (var x in namespaces)
xmlNamespaces.Add(x.Key, x.Value);
xmlSerializer.Serialize(xmlW, objeto, xmlNamespaces);
private static Planilha ExcelParaPlanilha(ExcelQueryFactory arquivoExcel)
Arquivo = Path.GetFileName(arquivoExcel.FileName), AbasPlanilhas = arquivoExcel.GetWorksheetNames().Select(nomePlanilha => new AbaPlanilha
Nome = nomePlanilha, Registros = arquivoExcel.Worksheet(nomePlanilha).Select(RowParaRegistroPlanilha).Where(registro => registro != null).ToList()}
private static RegistroPlanilha RowParaRegistroPlanilha(Row linhaExcel, int idx)
RegistroPlanilha registro = null;
foreach (var columnName in linhaExcel.ColumnNames)
var value = linhaExcel[columnName].Value;
if (value != null && value != DBNull.Value)
registro = new RegistroPlanilha()
Linha = idx + 1, Celulas = new List<CelulaPlanilha>()}
registro.Celulas.Add(new CelulaPlanilha(columnName, value));
[XmlElement("AbaPlanilha")]
public AbaPlanilha[] AbasPlanilhas
public List<RegistroPlanilha> Registros
public class RegistroPlanilha
public List<CelulaPlanilha> Celulas
public class CelulaPlanilha
public CelulaPlanilha(string coluna, object valor)