mukeshdepani8681 Ответов: 3

WPF DataGrid в Excel


Привет
Как экспортировать данные из WPF (Window based) Datagrid в Excel в том же формате, потому что я использую несколько заголовков в Datagrid. пожалуйста, помогите мне.

Спасибо!

mukeshdepani8681

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

3 Ответов

Рейтинг:
24

keerth516

dgDisplay - это имя DataGrid.Надеюсь, что приведенный ниже код решит вашу проблему.

private void ExportToExcelAndCsv()
       {
           dgDisplay.SelectAllCells();
           dgDisplay.ClipboardCopyMode = DataGridClipboardCopyMode.IncludeHeader;
           ApplicationCommands.Copy.Execute(null, dgDisplay);
           String resultat = (string)Clipboard.GetData(DataFormats.CommaSeparatedValue);
           String result = (string)Clipboard.GetData(DataFormats.Text);
           dgDisplay.UnselectAllCells();
           System.IO.StreamWriter file1 = new System.IO.StreamWriter(@"C:\Users\test.xls");
           file1.WriteLine(result.Replace(',', ' '));
           file1.Close();

           MessageBox.Show(" Exporting DataGrid data to Excel file created.xls");
       }


Member 10269928

Код работает Спасибо

Leonardo Lynx

Могут появиться пятна! Мучас Грасиас!

iato

Работает в 2018 году !

Member 14204059

Этот код не работает для меня.. лист Excel все еще пустой .. не могли бы вы, пожалуйста, сказать мне решение? Спасибо

Рейтинг:
1

Clifford Nelson

Это должен быть ручной процесс. Пример того, что я сделал для экспорта Excel:

private static void Excel(string fileName, List<IDirectoryInventoryDataCollector> list)
{
    try
    {
        var xlApp = new Excel.Application();
        var xlWorkBook = xlApp.Workbooks.Add();
        var xlWorkSheet = (Excel.Worksheet)xlWorkBook.Worksheets.get_Item(1);
        ExcelTitleRow(list[0], 1, xlWorkSheet);

        int row = 2;
        foreach (var item in list)
        {
            ExcelFillRow(item, row++, xlWorkSheet);
        }

        for (int i = 1; i < list[0].MaxLevel - 1; i++)
        {
            ((Range)xlWorkSheet.Columns[i]).ColumnWidth = 2;
        }
        ((Range)xlWorkSheet.Columns[list[0].MaxLevel - 1]).ColumnWidth = 30;
        ((Range)xlWorkSheet.Rows[1]).WrapText = true;
        ((Range)xlWorkSheet.Rows[1]).HorizontalAlignment = HorizontalAlignment.Center;
        ((Range)xlWorkSheet.Cells[1, 1]).WrapText = false;

        xlWorkBook.SaveAs(fileName);
        xlWorkBook.Close();
        xlApp.Quit();
    }
    catch (AccessViolationException)
    {
        System.Windows.Forms.MessageBox.Show(
             "Have encountered access violation. This could be issue with Excel 2000 if that is only version installed on computer",
             "Access Violation");
    }
    catch (Exception)
    {
        System.Windows.Forms.MessageBox.Show("Unknown error",
             "Unknown error");
    }
}

private static void ExcelFillRow(IDirectoryInventoryDataCollector item, int row, Excel.Worksheet sheet)
{
    sheet.Cells[row, item.Level] = item.Name;
    int column = item.MaxLevel;
    foreach (var property in item.GetProperties())
    {
        sheet.Cells[row, column++] = property;
    }
}

private static void ExcelTitleRow(IDirectoryInventoryDataCollector item, int row, Excel.Worksheet sheet)
{
    sheet.Cells[row, 1] = "Name";
    int column = item.MaxLevel;
    foreach (var property in item.GetPropertyNames())
    {
        sheet.Cells[row, column++] = property;
    }
}

Пространство имен, которое вам нужно, это
using Excel = Microsoft.Office.Interop.Excel;
using Microsoft.Office.Interop.Excel;


Member 13688494

Привет,
List<idirectoryinventorydatacollector & gt; не работает для меня. Есть ли использование для этого конкретного списка ?

Рейтинг:
0

Hrishikesh Ranjit Shivacharan

Проверьте этот код для WPF DataGrid to Excel

dataGrid-это имя DataGrid.

DataGrid dg = dataGrid;
dg.SelectAllCells();
dg.ClipboardCopyMode = DataGridClipboardCopyMode.IncludeHeader;
ApplicationCommands.Copy.Execute(null, dg);
dg.UnselectAllCells();
String Clipboardresult =(string)Clipboard.GetData(DataFormats.CommaSeparatedValue);
StreamWriter swObj = new StreamWriter("exportToExcel.csv");
swObj.WriteLine(Clipboardresult);
swObj.Close();
Process.Start("exportToExcel.csv");


Выше код не требует никаких DLL, чтобы создать файл Excel.


Pavasorn Noiphan

Из решения 3 Можно ли изменить шрифт текста или размер столбца?

Member 12059989

Данные из столбца даты экспортируются только####. Как справиться с этой проблемой ?

Member 14204059

Этот код не работает для меня.. лист Excel все еще пустой .. не могли бы вы, пожалуйста, сказать мне решение? Спасибо