Экспорт таблицы listView в Excel [дубликат]

98
22 января 2021, 12:40
На этот вопрос уже дан ответ здесь:
Как просто работать с / открыть / изменить / сохранить Excel - xlsx / CSV файлы (1 ответ)
Закрыт 1 год назад.

Помогите пожалуйста, как решить проблему экспорта. У меня есть определенное количество столбцов в listView их может быть меньше или больше и их название тоже может быть изменено. Так я нашел пример но он работает только если вписать название столбца которого нужно экспортировать . ws.Cells[1, 1] = ""; ws.Cells[1, 2] = ""; --> это два пустых столбца, как их заполнить имя автоматически

private void excell_Click(object sender, EventArgs e)
    {
        using(SaveFileDialog sfd=new SaveFileDialog() { Filter="Excel mon|*.xls", ValidateNames = true })
        {
            if (sfd.ShowDialog() == DialogResult.OK)
            {
                Microsoft.Office.Interop.Excel.Application app = new Microsoft.Office.Interop.Excel.Application();
                Workbook wb = app.Workbooks.Add(XlSheetType.xlWorksheet);
                Worksheet ws = (Worksheet)app.ActiveSheet;
                app.Visible = false;
                ws.Cells[1, 1] = "";
                ws.Cells[1, 2] = "";
                int i = 2;
                foreach(ListViewItem item in listView1.Items)
                {
                    ws.Cells[i, 1] = item.SubItems[0].Text;
                    ws.Cells[i, 2] = item.SubItems[1].Text;
                    i++;
                }
                wb.SaveAs(sfd.FileName, XlFileFormat.xlWorkbookDefault, Type.Missing, Type.Missing, true, false, XlSaveAsAccessMode.xlNoChange, XlSaveConflictResolution.xlLocalSessionChanges, Type.Missing, Type.Missing);
                app.Quit();
                MessageBox.Show("Ваши данные успешно сохранены.", "Message", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
        }
    }

Код решения с ошибкой Нет выравнивания текста вообще Итого как должно быть после выравнивания текста слева на право

Answer 1

если использовать ту библиотеку на которую я сослался (дубликат вопроса)

то код будет следующим:

private void excell_Click(object sender, EventArgs e)
{
    using(SaveFileDialog sfd=new SaveFileDialog() { Filter="Excel mon|*.xlsx", ValidateNames = true })
    {
        if (sfd.ShowDialog() == DialogResult.OK)
        {
            SaveExel(sfd.FileName);
            MessageBox.Show("Ваши данные успешно сохранены.", "Message", MessageBoxButtons.OK, MessageBoxIcon.Information);
        }
    }
}
public void SaveExel(string filepath)
{
    Excel xl = new Excel(); //создаем инстанс
    foreach(ListViewItem item in listView1.Items)
    {
        var arr = item.SubItems.OfType<ListViewItem.ListViewSubItem>().Select(x => x.Text).ToArray();
        xl.AddRow(arr);
    }
    xl.FileSave(filepath);
}

код не проверял, могут быть некоторые ошибки в строке со звездочками

даный код не требует для работы установленного экселя а так же работает значительно быстрее. И не оставляет висящих инстансов экселя в бекграунде, как делает, скорее всего, твой код. (проверь таскменеджером и поубивай или перезапусти комп)

READ ALSO
Привязка клавиш к управлению кнопками в WF

Привязка клавиш к управлению кнопками в WF

Я пишу змейку на формах и у меня возникла проблема: если на форме есть активные кнопки, змейка больше не реагирует на нажатие клавиш (LEFT, DOWN, RIGHT,...

101
htmlagilitypack c#

htmlagilitypack c#

проблема в том что AllNodes не получает никакого значения, возможно неправильно указан xPath? или

75
Заморозка движения объектов в unity3d [закрыт]

Заморозка движения объектов в unity3d [закрыт]

Хотите улучшить этот вопрос? Обновите вопрос так, чтобы он вписывался в тематику Stack Overflow на русском

104
.pem в X509Certificate2

.pem в X509Certificate2

Доброго времени суток

95