экспортировать данные в Excel, используя oledb - PullRequest
0 голосов
/ 25 апреля 2020

Мне нужно экспортировать большие данные средствами (только oldb). У меня есть список с около 100 тысяч записей. Как я могу написать это в Excel? Вам очень поможет!

OleDbConnection oleDbConnection = new OleDbConnection(@"provider = Microsoft.ACE.OLEDB.12.0; 
      data source = D:\5.xlsx; 
      Extended Properties = 'Excel 12.0'");
        oleDbConnection.Open();
        OleDbCommand oleDbCommand = new OleDbCommand("INSERT INTO [Rock$] " + "([Имя],[Фамилия],[Отчество]) " + "VALUES(@value1,@value2,@value3)");
        oleDbCommand.Connection = oleDbConnection;
        List<info> test = date.AsNoTracking().ToList();

        //Add list In excel use oledb


        oleDbCommand.ExecuteNonQuery();
        oleDbConnection.Close();

1 Ответ

0 голосов
/ 25 апреля 2020

Я знаю, что вы просили OleDb, но я хотел бы поделиться своим опытом с пакетом EPPlus . Я был удивлен, как быстро это. Ниже приведен мой тестовый пример:

Инициализация списка

static void Main()
{
    var random = new Random();
    var list = new List<Info>();
    for (int i = 0; i < 100000; i++)
    {
        list.Add(new Info() { prop1 = random.Next().ToString(), 
                              prop2 = random.Next().ToString(), 
                              prop3 = random.Next().ToString() });
    }
    SaveListToExcel(@"D:\5.xlsx", list);
}

Сохранение списка

private static void SaveListToExcel(string filePath, IEnumerable<Info> list)
{
    System.IO.FileInfo f = new System.IO.FileInfo(filePath);
    if (f.Exists) f.Delete();
    ExcelPackage.LicenseContext = LicenseContext.NonCommercial;
    using (ExcelPackage ep = new ExcelPackage(f))
    {
        ExcelWorksheet sheet = ep.Workbook.Worksheets.Add("Rock");
        sheet.Cells[1, 1].Value = "Имя"; ;
        sheet.Cells[1, 2].Value = "Фамилия";
        sheet.Cells[1, 3].Value = "Отчество";
        sheet.Cells[2, 1].LoadFromCollection(list);
        ep.Save();
    }
}

Информация класс

public class Info
{
    public string prop1 { get; set; }
    public string prop2 { get; set; }
    public string prop3 { get; set; }
}
...