Экспорт DGV или DataTable в файл Excel с помощью сводной c # - PullRequest
0 голосов
/ 20 сентября 2019

Прямо сейчас у меня есть DataTable, как этот

+----------------------+-----+----------+-----------+-----------+
| DiscPort             | Bag | Bulk     | Clinker   | Container |
+----------------------+-----+----------+-----------+-----------+
| 77558 -              | 0   | 15353.02 | 0         | 0         |
|   SURABAYA TERMINAL  |     |          |           |           |
+----------------------+-----+----------+-----------+-----------+
| 77559 -              | 0   | 0        | 38602.393 | 0         |
|   CIREBON            |     |          |           |           |
+----------------------+-----+----------+-----------+-----------+
| 77562 -              | 0   | 15244.26 | 0         | 3640      |
|   LEMBAR - LOMBOK    |     |          |           |           |
+----------------------+-----+----------+-----------+-----------+
| 77582 -              | 0   | 6487.97  | 0         | 5600      |
|   Samarinda Terminal |     |          |           |           |
+----------------------+-----+----------+-----------+-----------+

DataTable может быть успешно экспортирован в Excel с помощью этого набора кода

 private bool DataGridviewImportToExcel(DataGridView[] dgv_sheet, string fileName)
        {
            string saveFileName = "";
            SaveFileDialog saveDialog = new SaveFileDialog();
            saveDialog.DefaultExt = "xls";
            saveDialog.Filter = "Excel file|*.xls";
            saveDialog.FileName = fileName;
            saveDialog.ShowDialog();
            saveFileName = saveDialog.FileName;
            if (saveFileName.IndexOf(":") < 0)
                return false;
            Microsoft.Office.Interop.Excel.Application xlApp = new Microsoft.Office.Interop.Excel.Application();
            if (xlApp == null)
            {
                MessageBox.Show("can not create Excel");
                return false;
            }
            Workbooks workbooks = xlApp.Workbooks;
            Workbook workbook = workbooks.Add(XlWBATemplate.xlWBATWorksheet);
            Worksheet worksheet = (Worksheet)workbook.Worksheets[1];

            for (int index = 0; index < dgv_sheet.Length; index++)
            {
                for (int i = 0; i < dgv_sheet[index].ColumnCount; i++)
                {
                    worksheet.Cells[1, i + 1] = dgv_sheet[index].Columns[i].HeaderText;
                }

                for (int r = 0; r < dgv_sheet[index].Rows.Count; r++)
                {
                    for (int i = 0; i < dgv_sheet[index].ColumnCount; i++)
                    {
                        worksheet.Cells[r + 2, i + 1] = dgv_sheet[index].Rows[r].Cells[i].Value;
                    }
                    System.Windows.Forms.Application.DoEvents();
                }
                worksheet.Columns.EntireColumn.AutoFit();
                if (index < dgv_sheet.Length - 1)
                    worksheet = (Worksheet)workbook.Worksheets.Add();
            }

            if (saveFileName != "")
            {
                try
                {
                    workbook.Saved = true;
                    workbook.SaveCopyAs(saveFileName);
                }
                catch (Exception ex)
                {
                    MessageBox.Show("error,file maybe is opening!\n" + ex.Message);
                    return false;
                }
            }
            xlApp.Quit();
            GC.Collect();
            MessageBox.Show("File: " + fileName + ".xls save Successfully", "tip ", MessageBoxButtons.OK, MessageBoxIcon.Information);
            return true;
        }

Но моя проблема в том, как мнесделать экспортированный файл Excel также стать pivoted excel?

я пробовал учебник из https://www.iditect.com/tutorial/excel-pivottable/, но он не работает вообще, я пропускаю так много ссылок, как TableStyle, Workbook.Worksheet иоказалось, что я следовал неправильному учебнику, этот учебник добавляет сводку к существующему файлу Excel, в то время как мне нужно создать новый файл Excel с пивотом в нем

Мой ожидаемый результат заключается в том, что рабочая таблица Excel будетбыть таким Expected Pivot Любая помощь?

1 Ответ

0 голосов
/ 20 сентября 2019

Я думаю, что вы можете изменить текущую таблицу данных на сводную.

Затем вы конвертируете его в файл Excel.

Я столкнулся с некоторыми проблемами, когда использовал предоставленный вами метод DataGridviewImportToExcel.

Поэтому я создаю новый метод для преобразования данных в Excel.

Вы можете установить пакет Nuget ClosedXML.

Код:

private void button1_Click(object sender, EventArgs e)
        {
            DataTable dt = new DataTable();
            dt.Columns.Add("DiscPort");
            dt.Columns.Add("Bag");
            dt.Columns.Add("Bulk ");
            dt.Columns.Add("Clinker ");
            dt.Columns.Add("CContainer");
            dt.Rows.Add(0, 15353.02,0,0,120);
            dt.Rows.Add(0, 0, 38602.393, 0,120);
            dt.Rows.Add(0, 15244.26, 0, 0,130);
            dt.Rows.Add(0, 15353.02, 0, 5600,0);

            foreach (DataColumn item in dt.Columns)
            {
                item.ColumnName = "Sum of " + item.ColumnName;
            }
            double discport = 0;
            double bag = 0;
            double bulk = 0;
            double Clinker = 0;
            double CContainer = 0;

            foreach (DataRow item in dt.Rows)
            {
                discport += Convert.ToDouble(item[0]);
                bag+= Convert.ToDouble(item[1]);
                bulk+= Convert.ToDouble(item[2]);
                Clinker+= Convert.ToDouble(item[3]);
                CContainer+= Convert.ToDouble(item[4]);
            }
            dt.Rows.Add(discport, bag, bulk, Clinker, CContainer);
            converttoexcel("D:\\convert.xlsx", dt);
            MessageBox.Show("Test");

        }
        public void converttoexcel(string path, DataTable table)
        {
            XLWorkbook workbook = new XLWorkbook();
            table.TableName = "sheet1";
            workbook.Worksheets.Add(table);
            workbook.SaveAs(path);
        }

Результат:enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...