C # с использованием Microsoft.Office.Interop.Excel Добавить новую СЕРИЮ С диапазоном от другого рабочего листа - PullRequest
1 голос
/ 17 июня 2019

Я хочу, чтобы Excel выглядел так:

enter image description here

enter image description here

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

это мой код и то, что я пробовал:

Но я получил ошибку, так как

System.Runtime.InteropServices.COMException: 'Exception from HRESULT: 0x800A03EC'

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

using Microsoft.Office.Interop.Excel;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace EXCELTEST
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            Microsoft.Office.Interop.Excel.Application xlApp;
            xlApp = new Microsoft.Office.Interop.Excel.Application
            {
                DisplayAlerts = true,
                Visible = true
            };
            Workbook reportWorkbook = xlApp.Workbooks.Add();
            Worksheet reportWorksheet = reportWorkbook.Worksheets.Add();

            reportWorksheet.Cells[1, "B"] = "Volt";
            reportWorksheet.Cells[1, "A"] = "Capacity";

            int c = 0;
            int i = 2;
            double v = 2.5;
            double vDiff = 0.050;
            while ( i < 30 )
            {

                reportWorksheet.Cells[i, "B"] = v;
                reportWorksheet.Cells[i, "A"] = c;

                v += vDiff;
                vDiff -= 0.001;
                c += 10;
                i++;
            }

            Worksheet ChartWorksheet = reportWorkbook.Worksheets.Add();
            Range chartRange;
            ChartObjects xlCharts = (ChartObjects)ChartWorksheet.ChartObjects(Type.Missing);
            ChartObject myChart = (ChartObject)xlCharts.Add(10, 80, 300, 250);
            Chart chartPage = myChart.Chart;
            chartRange = ChartWorksheet.get_Range("'Sheet2'!A1", "'Sheet2'!B29");
            chartPage.SetSourceData(chartRange);
            //chartPage.ChartType = Excel.XlChartType.xlLine;
            chartPage.ChartType = XlChartType.xlLine;


        }
    }
}

1 Ответ

2 голосов
/ 17 июня 2019

Вместо использования этого

chartRange = ChartWorksheet.get_Range("'Sheet2'!A1", "'Sheet2'!B29");

Используйте следующий код для выбора диапазона

chartRange = reportWorksheet.get_Range("A1","B39");

, и вы должны получитьэто работает ..

Редактировать

Чтобы получить Вольт на стороне, попробуйте следующее:

Worksheet ChartWorksheet = reportWorkbook.Worksheets.Add();
ChartWorksheet = reportWorkbook.ActiveSheet;
ChartObjects xlCharts = (ChartObjects)ChartWorksheet.ChartObjects(Type.Missing);
ChartObject myChart = (ChartObject)xlCharts.Add(10, 80, 300, 250);
Chart chartPage = myChart.Chart;
SeriesCollection oSeriesCollection = (SeriesCollection)myChart.Chart.SeriesCollection();
Series Data = oSeriesCollection.NewSeries();
Data.XValues = reportWorksheet.get_Range("A2", "A29");
Data.Values = reportWorksheet.get_Range("B2", "B29");
Data.Name = "Volt";
chartPage.ChartType = XlChartType.xlLineMarkers;

Визуализированный вывод:

enter image description here

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