1

私は、C# と Excel 相互運用 DLL を使用してプログラムでチャートを開発しています。Excel チャートで TickLabels の境界線の色を設定する必要があります。これは私のスクリーンショットで、境界線の色をプログラムで設定する必要がある領域を指しています。私はたくさん試してグーグルで検索しましたが、手がかりが見つかりませんでした。私の写真とコードを見て、私の目標を達成するのを手伝ってください。

ここに画像の説明を入力

ここに私の完全なコードがあります

public ChartData PrepareExcel()
        {
            bool flag = false;
            int rowindex = 3;
            if (oData != null)
            {
                if (oData.Tables.Count > 0)
                {

                    if (oData.Tables[0].Rows.Count > 0)
                    {
                        Excel.Application xlApp;
                        Excel.Workbook xlWorkBook;
                        Excel.Worksheet xlWorkSheet1;
                        Excel.Worksheet xlWorkSheet2;
                        Excel.Worksheet xlWorkSheetChart;
                        object misValue = System.Reflection.Missing.Value;

                        xlApp = new Excel.Application();
                        xlWorkBook = xlApp.Workbooks.Add(misValue);

                        try
                        {
                            xlWorkSheet1 = (Excel.Worksheet)xlWorkBook.Worksheets.get_Item(1);
                            xlWorkSheet1.Name = "Detail Data";

                            xlWorkSheet2 = (Excel.Worksheet)xlWorkBook.Worksheets.get_Item(2);
                            xlWorkSheet2.Name = "Summary Data";

                            xlWorkSheetChart = (Excel.Worksheet)xlWorkBook.Worksheets.get_Item(3);
                            xlWorkSheetChart.Name = "Chart";


                            // for first sheet start
                            xlWorkSheet1.Cells[1, 1] = "Daily Finished Jobs History Detail Report From " +
                                DateTime.ParseExact(this.startdate, "yyyyMMdd", CultureInfo.InvariantCulture).ToString("yyyy-MM-dd") +" To " +
                                DateTime.ParseExact(this.enddate, "yyyyMMdd", CultureInfo.InvariantCulture).ToString("yyyy-MM-dd");

                            xlWorkSheet1.get_Range("A1", "Y1").Merge(true);
                            xlWorkSheet1.get_Range("A1", "Y1").HorizontalAlignment = Excel.XlHAlign.xlHAlignCenter;
                            xlWorkSheet1.get_Range("A1", "Y1").Font.Bold = true;
                            xlWorkSheet1.get_Range("A1", "Y1").Font.Size = 14;
                            xlWorkSheet1.get_Range("A3", "Y3").Font.Bold = true;

                            for (int x = 0; x <= oData.Tables[0].Columns.Count - 1; x++)
                            {
                                xlWorkSheet1.Cells[3, x + 1] = oData.Tables[0].Columns[x].ColumnName.ToString();
                                xlWorkSheet1.Columns[x + 1].AutoFit();
                                //xlWorkSheet1.Columns[x + 1].Font.Bold = true;
                            }


                            for (int x = 0; x <= oData.Tables[0].Rows.Count - 1; x++)
                            {
                                int row= rowindex + (x + 1);
                                for (int y = 0; y <= oData.Tables[0].Columns.Count - 1; y++)
                                {
                                    xlWorkSheet1.Cells[row, y + 1] = oData.Tables[0].Rows[x][y].ToString();
                                    xlWorkSheet1.Columns[1].AutoFit();
                                }
                            }

                            // for first sheet end

                            // for second sheet start

                            xlWorkSheet2.Cells[1, 1] = "Daily Finished Jobs History Summary Report From " +
                            DateTime.ParseExact(this.startdate, "yyyyMMdd", CultureInfo.InvariantCulture).ToString("yyyy-MM-dd") + " To " +
                            DateTime.ParseExact(this.enddate, "yyyyMMdd", CultureInfo.InvariantCulture).ToString("yyyy-MM-dd");

                            xlWorkSheet2.get_Range("A1", "I1").Merge(true);
                            xlWorkSheet2.get_Range("A1", "I1").HorizontalAlignment = Excel.XlHAlign.xlHAlignCenter;
                            xlWorkSheet2.get_Range("A1", "I1").Font.Bold = true;
                            xlWorkSheet2.get_Range("A1", "I1").Font.Size = 14;
                            xlWorkSheet2.get_Range("A3", "I3").Font.Bold = true;

                            for (int x = 0; x <= oData.Tables[1].Columns.Count - 1; x++)
                            {
                                xlWorkSheet2.Cells[3, x + 1] = oData.Tables[1].Columns[x].ColumnName.ToString();
                                xlWorkSheet2.Columns[x + 1].AutoFit();
                            }

                            for (int x = 0; x <= oData.Tables[1].Rows.Count - 1; x++)
                            {
                                int row = rowindex + (x + 1);
                                for (int y = 0; y <= oData.Tables[1].Columns.Count - 1; y++)
                                {
                                    xlWorkSheet2.Cells[row, y + 1] = oData.Tables[1].Rows[x][y].ToString();
                                    xlWorkSheet2.Columns[1].AutoFit();
                                }
                                flag = true;
                            }

                            //for second sheet end

                            // chart start

                            if (flag)
                            {
                                Excel.SeriesCollection seriesCollection;
                                Excel.Series series1, series2, series3;

                                Excel.ChartObjects xlCharts = (Excel.ChartObjects)xlWorkSheetChart.ChartObjects(Type.Missing);
                                Excel.ChartObject myChart = (Excel.ChartObject)xlCharts.Add(10, 20, 900, 520);
                                Excel.Chart chartPage = myChart.Chart;
                                chartPage.HasTitle = true;
                                chartPage.ChartTitle.Text = "Daily Job History Chart  From " +
                                DateTime.ParseExact(this.startdate, "yyyyMMdd", CultureInfo.InvariantCulture).ToString("yyyy-MM-dd") + " To " +
                                DateTime.ParseExact(this.enddate, "yyyyMMdd", CultureInfo.InvariantCulture).ToString("yyyy-MM-dd");

                                chartPage.Legend.Position = XlLegendPosition.xlLegendPositionBottom;

                                seriesCollection = (Excel.SeriesCollection)chartPage.SeriesCollection(Type.Missing);
                                series1 = seriesCollection.NewSeries();
                                series2 = seriesCollection.NewSeries();
                                series3 = seriesCollection.NewSeries();

                                series1.Name = "='Summary Data'!$B$3";
                                series1.Values = "='Summary Data'!$B$4:$B$" + (5+ oData.Tables[1].Rows.Count);
                                series1.ChartType = XlChartType.xlColumnClustered;
                                series1.AxisGroup = XlAxisGroup.xlSecondary;

                                series2.Name = "='Summary Data'!$C$3";
                                series2.XValues = "='Summary Data'!$A$4:$A$" + (5 + oData.Tables[1].Rows.Count);
                                series2.Values = "='Summary Data'!$C$4:$C$" + (5 + oData.Tables[1].Rows.Count);
                                series2.ChartType = XlChartType.xlLineMarkers;


                                series3.Name = "='Summary Data'!$D$3";
                                series3.Values = "='Summary Data'!$D$4:$D$" + (5 + oData.Tables[1].Rows.Count);
                                series3.ChartType = XlChartType.xlLineMarkers;
                                series3.AxisGroup = XlAxisGroup.xlPrimary;

                                Axis axis;
                                axis = (Axis)chartPage.Axes(XlAxisType.xlValue, XlAxisGroup.xlPrimary);
                                axis.HasTitle = true;
                                axis.AxisTitle.Text = "Percentage/Hour";
                                axis.AxisTitle.Font.Color = Color.Blue;
                                axis.Border.Color = Color.Transparent;
                                axis.HasMajorGridlines = false;
                                axis.HasMinorGridlines = false;

                                axis = (Axis)chartPage.Axes(XlAxisType.xlValue, XlAxisGroup.xlSecondary);
                                axis.HasTitle = true;
                                axis.AxisTitle.Text = "Total Jobs completed";
                                axis.AxisTitle.Font.Color = Color.Blue;
                                axis.HasMajorGridlines = true;
                                axis.HasMinorGridlines = false;

                                axis = (Excel.Axis)chartPage.Axes(XlAxisType.xlCategory);
                                axis.MajorTickMark = XlTickMark.xlTickMarkNone;
                                axis.HasMajorGridlines = true;

                                chartPage.Axes(Excel.XlAxisType.xlCategory).Select();
                                chartPage.Axes(Excel.XlAxisType.xlCategory).TickLabels.Orientation = 35;
                            }
                            // chart end
                            string strpath = System.Windows.Forms.Application.StartupPath.ToString() + "\\DailyFinishedJobHistoryReport_"+DateTime.Now.ToString("dd-MM-yyyy")+".xls";

                            if (File.Exists(strpath))
                            {
                                File.Delete(strpath);
                            }

                            xlWorkBook.SaveAs(strpath, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Excel.XlSaveAsAccessMode.xlExclusive, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing);

                        }
                        catch (Exception ex)
                        {

                        }
                        finally
                        {
                            xlWorkBook.Close(false, misValue, misValue);
                            xlWorkBook = null;
                            xlApp.Quit();
                            xlApp = null;
                            GC.Collect();
                            GC.WaitForPendingFinalizers();
                        }
                    }
                }
            }

            return this;
        }

日付が表示されている矢印部分をご覧ください。その領域の境界線の色を変更したい。教えて。ありがとう

アップデート

ここに画像の説明を入力

このスクリーンショットを参照してください。基本的に、その領域の境界線の色を透明に変更したいのですが、コードを追加する必要がある場所の手がかりが得られません。それでもわからない場合は、お知らせください。ありがとう

4

1 に答える 1

0

コメントを介して私が提案したものが必要であり、コードの残りの部分であまり詳しく説明しないことを想定することにより (簡単な提案:GC部分を削除することをお勧めします); これはあなたが求めているものです:

axis = (Axis)chartPage.Axes(XlAxisType.xlCategory);
axis.MajorTickMark = XlTickMark.xlTickMarkNone;
axis.Format.Line.Visible = Microsoft.Office.Core.MsoTriState.msoFalse;

このコードは X 軸を参照します。2 行目は主要な目盛り (図に示されている小さな垂直線) を削除し、3 行目は水平線を削除します。この 2 番目の修正に関しては.HasMajorGridlines = true;、X 軸上にあるため、主なグリッド線からの水平線が引き続き表示されることに注意してください (これ.HasMajorGridlines = false;は、X 軸に書き込まない限り削除できません)。

注: コメントを介して OP で強調表示されているように、上記のコードの最後の行は、FormatOffice 2003 には存在しないプロパティ ( ) を参照しています。このコードは、Office 2010 以降のバージョンで正常に動作するはずです。

于 2013-11-02T09:26:05.133 に答える