Мне нужно вытащить все из базы данных в Exel файл, работаю с SQLite and ClosedXml. Работаю по шаблону, заранее созданный шаблон, нужно все вывести. Все что пока сделал, не работает, один раз добавляет и потом Exception Элемент с тем же ключом уже был добавлен. Мой код:
string query = "select * from "+bdName;
string fileOut = @".\Books\finish.xlsx";
var template = new XLTemplate(@".\Books\TemplateExel.xlsx");
if (bdName != null)
{
SQLiteCommand command = new SQLiteCommand(query, DB);
SQLiteDataReader dataReader = command.ExecuteReader();
if (dataReader.HasRows)
{
while (dataReader.Read())
{
var dbCust = new DbTemplate();
dbCust.Date = dataReader.GetString(1);
dbCust.Name = dataReader.GetString(2);
dbCust.NameOperation = dataReader.GetString(3);
dbCust.Count = dataReader.GetString(4);
//первый вариант
template.AddVariable(dbCust);
template.Generate();
template.SaveAs(fileOut);
//второй вариант
//template.AddVariable("Date", data_picker);
//template.AddVariable("Name", txt_name.Text);
//template.AddVariable("NameOperation", txt_nameOperation);
//template.AddVariable("Count", txt_count.Text);
}
}
}
Если взять библиотеку-враппер на ClosedXml отсюда:
Как просто работать с / открыть / изменить / сохранить Excel - xlsx / CSV файлы
То код будет приблизительно:
string query = "select * from "+bdName;
string fileOut = @".\Books\finish.xlsx";
SQLiteCommand command = new SQLiteCommand(query, DB);
SQLiteDataReader rdr = command.ExecuteReader();
Excel xl = new Excel(); //создаем инстанс
var сolumnNames = ReadColumnNames();
var allRows = ReadAllRows(rdr, ColumnNames.Count() );
xl.AddRow(сolumnNames);
foreach (var row in allRows)
{
xl.AddRow(row);
}
xl.FileSave(fileOut); //сохраняем файл
public List<string> ReadColumnNames(SQLiteDataReader rdr)
{
var columns = new List<string>();
for(int i=0; i < rdr.FieldCount; i++)
columns.Add( rdr.GetName(i) );
return columns;
}
public List<string> ReadAllRows(SQLiteDataReader rdr, int columnsNum)
{
var rez = new List<string[]>();
while (rdr.Read(rdr, columnsNum))
{
rez.Add(ReadSingleRow(rdr, columnsNum));
}
return rez;
}
public string[] ReadSingleRow(SQLiteDataReader rdr, int columnsNum)
{
string[] rez = new string[columnsNum]();
for(int i=0; i<= columnsNum)
{
rez[i] = rdr.GetString(0);
}
return rez;
}
Код писал в блокноте и не проверял так что могут быть мелкие ошибки.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Доброе время суток, я не знаю как отправить ПОСТ запрос, но при этом получить ответ от сервера и вывести на экран (типа MessageBox)Помогите пожалуйста
хочу, чтобы success менялся на true или false в зависимости от ответа apiКод:
Пытаю выполнить вот такой запрос INSERT INTO catalog_product_entity_int(attribute_id, store_id, entity_id, value) VALUES (558, 0, (SELECT cpeentity_id FROM catalog_product_entity cpe LEFT JOIN catalog_product_entity_int cpei ON cpe
Хотите улучшить этот вопрос? Обновите вопрос так, чтобы он вписывался в тематику Stack Overflow на русском