Ishakkhan Ответов: 1

Экспорт линейной диаграммы в excel с помощью ASP.NET


Здесь я экспортирую gridview в excel, но мне нужно экспортировать линейную диаграмму в excel.

Что я уже пробовал:

/// Здесь я попробовал для Gridview ////

private void ExportToExcel()
    {
        try
        {
            Response.Clear();
            Response.Buffer = true;
            Response.AddHeader("content-disposition", "attachment;filename=OverallReport.xls");
            Response.Charset = "";
            Response.ContentType = "application/vnd.ms-excel";
            using (StringWriter sw = new StringWriter())
            {
                HtmlTextWriter hw = new HtmlTextWriter(sw);

                //To Export all pages
                dgvTrendChart.AllowPaging = false;
                this.SearchOverallList();

                dgvTrendChart.HeaderRow.BackColor = Color.White;
                foreach (TableCell cell in dgvTrendChart.HeaderRow.Cells)
                {
                    cell.BackColor = dgvTrendChart.HeaderStyle.BackColor;
                }

                for (int rowIndex = dgvTrendChart.Rows.Count - 2; rowIndex >= 0; rowIndex--)
                {
                    GridViewRow row = dgvTrendChart.Rows[rowIndex];
                    GridViewRow previousRow = dgvTrendChart.Rows[rowIndex + 1];

                    for (int i = 0; i < row.Cells.Count; i++)
                    {
                        if (i != 3)
                        {
                            if (row.Cells[i].Text == previousRow.Cells[i].Text)
                            {
                                row.Cells[i].RowSpan = previousRow.Cells[i].RowSpan < 2 ? 2 :
                                                       previousRow.Cells[i].RowSpan + 1;
                                previousRow.Cells[i].Visible = false;
                                row.Cells[i].HorizontalAlign = HorizontalAlign.Center;
                                row.Cells[i].VerticalAlign = VerticalAlign.Top;
                            }
                        }
                    }
                }
                dgvTrendChart.RenderControl(hw);

                //style to format numbers to string
                string style = @"<style> .textmode { } </style>";
                Response.Write(style);
                Response.Output.Write(sw.ToString());
                Response.Flush();
                Response.End();
            }
        }
        catch
        {
            //throw new Exception("");
        }
    }

Suvendu Shekhar Giri

Так в чем же проблема с кодом, который вы пробовали?
Дает ли он какую-либо ошибку?

Ishakkhan

Этот код предназначен для экспорта gridview в excel.it работает нормально.Но мне нужно экспортировать линейную диаграмму в excel.So - мне нужна твоя помощь.

1 Ответов

Рейтинг:
4

Wessel Beulink

    Excel.Workbook xlWorkBook;
    Excel.Worksheet xlWorkSheet;
    object misValue = System.Reflection.Missing.Value;
    Excel._Application xlApp = new Excel.Application();

    xlWorkBook = xlApp.Workbooks.Add(misValue);
    xlWorkSheet = (Excel.Worksheet)xlWorkBook.Worksheets.get_Item(1);

//add data
xlWorkSheet.Cells[1, 1] = 13;
xlWorkSheet.Cells[1, 2] = 27;
xlWorkSheet.Cells[1, 3] = 22;
xlWorkSheet.Cells[1, 4] = 22;

xlWorkSheet.Cells[2, 1] = 42    ;
xlWorkSheet.Cells[2, 2] = 35;
xlWorkSheet.Cells[2, 3] = 22;
xlWorkSheet.Cells[2, 4] = 22;

xlWorkSheet.Cells[3, 1] = 1;
xlWorkSheet.Cells[3, 2] = 10;
xlWorkSheet.Cells[3, 3] = 4;
xlWorkSheet.Cells[3, 4] = 4;


Excel.ChartObjects xlCharts = (Excel.ChartObjects)xlWorkSheet.ChartObjects(Type.Missing);
Excel.ChartObject myChart = (Excel.ChartObject)xlCharts.Add(10, 80, 300, 250);
Excel.Chart chartPage = myChart.Chart;
myChart.Select();

chartPage.ChartType = Excel.XlChartType.xlXYScatterLines;
Microsoft.Office.Interop.Excel.Application xla = new Microsoft.Office.Interop.Excel.Application();
Excel.SeriesCollection seriesCollection = chartPage.SeriesCollection();

Excel.Series series1 = seriesCollection.NewSeries();
series1.XValues = xlWorkSheet.get_Range("A1", "B1"); ;
series1.Values = xlWorkSheet.get_Range("C1", "D1");

Excel.Series series2 = seriesCollection.NewSeries();
series2.XValues = xlWorkSheet.get_Range("A2", "B2"); ;
series2.Values = xlWorkSheet.get_Range("C2", "D2");

Excel.Series series3 = seriesCollection.NewSeries();
series3.XValues = xlWorkSheet.get_Range("A3", "B3"); ;
series3.Values = xlWorkSheet.get_Range("C3", "D3");



xlWorkBook.SaveAs(@"C:\ProgramData\RadiolocationQ\Text.xls", Excel.XlFileFormat.xlWorkbookNormal, misValue, misValue, misValue, misValue, Excel.XlSaveAsAccessMode.xlExclusive, misValue, misValue, misValue, misValue, misValue);
xlWorkBook.Close(true, misValue, misValue);
xlApp.Quit();


Ishakkhan

Спасибо за ваш ответ.Я использовал этот код, но он показывает ошибку типа

Невозможно неявно преобразовать тип "объект" в "Microsoft".Офис.Взаимодействие.Превосходить.Помощьюseriescollection'. Существует явное преобразование (вы пропускаете приведение?)

Wessel Beulink

заменить (Excel.Рабочий лист) xlWorkBook.Worksheets. get_Item (1) to:

(Microsoft.Офис.Взаимодействие.Превосходить.Рабочий лист) xlWorkBook.Worksheets. get_Item(1)
или импортировать Microsoft.Офис.Взаимодействие

Ishakkhan

Спасибо за ваши комментарии.Я попробовал код, который вы упомянули выше, но все равно это ошибка.

Wessel Beulink

На какой линии он тормозит? Там несколько Excel.SeriesCollection бросает в Примере.

Ishakkhan

В этом месте произошла ошибка.

Превосходить.SeriesCollection seriesCollection = chartPage.Помощьюseriescollection();

Wessel Beulink

Странный отлично работает на моем. Мэйби, ты что-то упускаешь.
Можете ли вы попробовать предварительно разыграть диаграмму?SeriesCollection () в Excel.Помощьюseriescollection
так:

Превосходить.SeriesCollection seriesCollection = (Microsoft.Офис.Взаимодействие.Превосходить.SeriesCollection)(chartPage.Помощьюseriescollection());

Ishakkhan

Большое вам спасибо, Мистер Вессел Бьюлинк.Теперь он работает совершенно нормально.Большое вам спасибо за ваши добрые ответы.

Wessel Beulink

Без проблем :)

Ishakkhan

Еще одно сомнение, сэр. Здесь вы жестко закодировали значения ячеек (A,B,C,D).но у меня есть datatable, так как же я могу интегрировать свой datatable в эту серию.Я новичок, сэр.Если я Задам глупый вопрос означает, Пожалуйста, aplogize меня.

Wessel Beulink

Да, это лист excel по умолчанию. Вы можете использовать.Cells. set_Item(row, col, value); функция на excel.range В и для изменения значений.

Или создал лист с именами, но это сложнее.
Вы можете найти более подробную информацию о: http://xlsxwriter.readthedocs.io/worksheet.html

Ishakkhan

Спасибо за ваши комментарии, сэр.

Ishakkhan

Г-н Вессель Бьюлинк здесь, файл excel был сохранен в уважаемом месте, но как я могу загрузить файл excel, когда я нажимаю на кнопку excel?

Wessel Beulink

Вы можете просто создать ссылку:

 <a href='/path/to/excel/file.xls' target="_blank">Download</a> 


Или вход:

 <input type="button" value="Download" onClick="window.location.href='/path/to/excel/file.xls'"> 

Ishakkhan

Спасибо за ваши комментарии.