Spire.Office 7.7.6 のリリースを発表できることを嬉しく思います。このバージョンでは、Spire.Doc は新しいエンジンを使用して Word を PDF に変換する際に、テキストの方向を保持することをサポートしました。Spire.PDF はタグ PDF ファイルと PDF/UA ファイルの作成をサポートしました。Spire.XLS は DataTable のエクスポート時にデータを保持するかどうかを設定する数値フォーマットをサポートしました。Spire.Presentation はスライド画像の切り抜きをサポートしました。さらに、このバージョンでは、多くの既知の問題も修正しました。詳細は以下の内容を読んでください。
このバージョンでは、Spire.Doc,Spire.PDF,Spire.XLS,Spire.Email,Spire.DocViewer, Spire.PDFViewer,Spire.Presentation,Spire.Spreadsheet, Spire.OfficeViewer, Spire.DocViewer, Spire.Barcode, Spire.DataExport の最新バージョンが含まれています。
DLL Versions:
- Spire.Doc.dll v10.7.16
- Spire.Pdf.dll v8.7.9
- Spire.XLS.dll v12.7.0
- Spire.Email.dll v5.6.0
- Spire.DocViewer.Forms.dll v7.6.0
- Spire.PdfViewer.Forms.dll v7.7.0
- Spire.PdfViewer.Asp.dll v7.7.0
- Spire.Presentation.dll v7.7.1
- Spire.Spreadsheet.dll v6.6.1
- Spire.OfficeViewer.Forms.dll v7.7.6
- Spire.Barcode.dll v6.7.0
- Spire.DataExport.dll v4.5.0
- Spire.DataExport.ResourceMgr.dll v2.1.0
ここで Spire.Office 7.7.6 をダウンロードする:
このリリースで行われた変更のリストは次のとおりです
Spire.Doc
カテゴリー | ID | 説明 |
New feature | - | NewEngine を使用して Word を PDF に変換するときに、テキストの方向を保持しました。 |
Adjustment | - | public IStyle FindById(int styleId) メソッドを放棄しました。 |
Adjustment | - | public IStyle FindByIstd(int istd) メソッドを放棄しました。 |
Adjustment | - | public IStyle FindByIdentifier(int sIdentifier) メソッドを公開しました。 |
Bug | SPIREPDF-6923 | Word を PDF に変換し、改ページが正しくない問題を修正しました。 |
Bug | SPIREPDF-7103 SPIREPDF-7796 |
Word を PDF に変換し、コンテンツフォーマットが正しくない問題が修正されました。 |
Bug | SPIREPDF-7591 | Word を PDF に変換し、改行が正しくない問題が修正されました。 |
Bug | SPIREPDF-7601 | Word を PDF に変換し、表形式のテキストが不完全に表示される問題を修正しました。 |
Bug | SPIREPDF-7660 | HTML をロードするときに、アプリケーションが「InvalidOperationException」 をスローする問題を修正しました。 |
Bug | SPIREPDF-7793 | 画像を置換するときに、アプリケーションが「InvalidCastException」をスローする問題を修正しました。 |
Bug | SPIREPDF-7821 | HTML をロードするときに、アプリケーションが「FileNotFoundException」 をスローする問題を修正しました。 |
Bug | SPIREPDF-7826 | ドメイン値が正しく設定されていない問題を修正しました。 |
Bug | SPIREPDF-7830 | Word を PDF に変換するときに、数式のずれの問題を修正しました。 |
Bug | SPIREPDF-7892 | 新しいエンジン方式で Word を PDF に変換する際に、ヘッダーフッターを設定する連続していないと有効にならない問題を修正しました。 |
Bug | SPIREPDF-7922 | Word から PDF への変換するときに、アプリケーションが「InvalidOperationException」をスローする問題を修正しました。 |
Bug | - | Comment.CommentMarkEnd と Comment.CommentMarkStart の参照の問題を修正しました。 |
Bug | SPIREDOC-7218 | 統計段落の文字数が正しくない問題を修正しました。 |
Bug | SPIREDOC-7317 | セルをマージした後に、列が多くなる問題を修正しました。 |
Bug | SPIREDOC-7467 | HTMLファイルをロードするときに、アプリケーションが 「NullReferenceException: オブジェクト参照をオブジェクトのインスタンスに設定しない」をスローする問題を修正しました。 |
Bug | SPIREDOC-7604 | Word が PDF に変換した後、表に境界線が多く出る問題を修正しました。 |
Bug | SPIREDOC-7833 | HTML から Word に変換した後、表の枠線が失われる問題を修正しました。 |
Bug | SPIREDOC-7884 | HTML から Word に変換した後、表の場所が変更される問題を修正しました。 |
Bug | SPIREDOC-7933 | Doc 形式のドキュメントを生成するときに、表のレイアウトが正しくない問題を修正しました。 |
Bug | SPIREDOC-7967 | RTF から PDF に変換した後、画像が失われる問題を修正しました。 |
Bug | SPIREDOC-7968 | 複数のコラムを作成し、WordからPDFに変換した後、複数のコラムが有効になっていない問題を修正しました。 |
Bug | SPIREDOC-8002 | ブックマークにテキストを追加するとスペースが多くなる問題が修正されました。 |
Bug | SPIREDOC-8033 | Word から PDFに変換するときに、アプリケーションがハングする問題を修正しました。 |
Bug | SPIREDOC-8106 | Word から PDF に変換した後、画像が正しくない問題を修正しました。 |
Bug | SPIREDOC-8125 | ドキュメントにカスタムのプロパティをNULLに設定すると、アプリケーションが「プロパティ値の型がサポートされていません」をスローする問題を修正しました。 |
Spire.PDF
カテゴリー | ID | 説明 |
New feature | SPIREPDF-3803 | タグPDFファイルの作成をサポートしました。
//Note:At present, in order to ensure the validity of the output tagged PDF file, it is necessary to add the valid license of Spire.PDF for .net to remove the red warning watermark. //Spire.License.LicenseProvider.SetLicenseKey("valid license key"); //Create a pdf document PdfDocument doc = new PdfDocument(); //Add page doc.Pages.Add(); //Set tab order doc.Pages[0].SetTabOrder(TabOrder.Structure); //Create PdfTaggedContent PdfTaggedContent taggedContent = new PdfTaggedContent(doc); taggedContent.SetLanguage("en-US"); taggedContent.SetTitle("test"); //Set font PdfTrueTypeFont font = new PdfTrueTypeFont(new System.Drawing.Font("Times New Roman", 10), true); PdfSolidBrush brush = new PdfSolidBrush(Color.Black); //Append elements PdfStructureElement article = taggedContent.StructureTreeRoot.AppendChildElement(PdfStandardStructTypes.Document); PdfStructureElement paragraph1 = article.AppendChildElement(PdfStandardStructTypes.Paragraph); PdfStructureElement span1 = paragraph1.AppendChildElement(PdfStandardStructTypes.Span); span1.BeginMarkedContent(doc.Pages[0]); PdfStringFormat format = new PdfStringFormat(PdfTextAlignment.Justify); doc.Pages[0].Canvas.DrawString("Spire.PDF for .NET is a professional PDF API applied to creating, writing, editing, handling and reading PDF files.", font, brush, new Rectangle(40, 0, 480, 80), format); span1.EndMarkedContent(doc.Pages[0]); PdfStructureElement paragraph2 = article.AppendChildElement(PdfStandardStructTypes.Paragraph); paragraph2.BeginMarkedContent(doc.Pages[0]); doc.Pages[0].Canvas.DrawString("Spire.PDF for .NET can be applied to easily convert Text, Image, SVG, HTML to PDF and convert PDF to Excel with C#/VB.NET in high quality.", font, brush, new Rectangle(40, 80, 480, 60), format); paragraph2.EndMarkedContent(doc.Pages[0]); PdfStructureElement figure1 = article.AppendChildElement(PdfStandardStructTypes.Figure); //Set Alternate text figure1.Alt = "replacement text1"; figure1.BeginMarkedContent(doc.Pages[0], null); PdfImage image = PdfImage.FromFile(@"E-logo.png"); doc.Pages[0].Canvas.DrawImage(image, new PointF(40, 200), new SizeF(100, 100)); figure1.EndMarkedContent(doc.Pages[0]); PdfStructureElement figure2 = article.AppendChildElement(PdfStandardStructTypes.Figure); //Set Alternate text figure2.Alt = "replacement text2"; figure2.BeginMarkedContent(doc.Pages[0], null); doc.Pages[0].Canvas.DrawRectangle(PdfPens.Black, new Rectangle(300, 200, 100, 100)); figure2.EndMarkedContent(doc.Pages[0]); //Save to file String result = "CreateTaggedFile_result.pdf"; doc.SaveToFile(result); doc.Close(); |
New feature | SPIREPDF-4559 | PDF/UAファイルの作成をサポートしました。
//Note:At present, in order to ensure the validity of the output PDF/UA file, it is necessary to add the valid license of Spire.PDF for .net to remove the red warning watermark. //Spire.License.LicenseProvider.SetLicenseKey("valid license key"); //Create a pdf document PdfDocument doc = new PdfDocument(); //Add page doc.Pages.Add(); //Set tab order doc.Pages[0].SetTabOrder(TabOrder.Structure); //Create PdfTaggedContent PdfTaggedContent taggedContent = new PdfTaggedContent(doc); taggedContent.SetLanguage("en-US"); taggedContent.SetTitle("test"); //Set PDF/UA1 identification taggedContent.SetPdfUA1Identification(); //Set font PdfTrueTypeFont font = new PdfTrueTypeFont(new System.Drawing.Font("Times New Roman", 10), true); PdfSolidBrush brush = new PdfSolidBrush(Color.Black); //Append elements PdfStructureElement article = taggedContent.StructureTreeRoot.AppendChildElement(PdfStandardStructTypes.Document); PdfStructureElement paragraph1 = article.AppendChildElement(PdfStandardStructTypes.Paragraph); PdfStructureElement span1 = paragraph1.AppendChildElement(PdfStandardStructTypes.Span); span1.BeginMarkedContent(doc.Pages[0]); PdfStringFormat format = new PdfStringFormat(PdfTextAlignment.Justify); doc.Pages[0].Canvas.DrawString("Spire.PDF for .NET is a professional PDF API applied to creating, writing, editing, handling and reading PDF files.", font, brush, new Rectangle(40, 0, 480, 80), format); span1.EndMarkedContent(doc.Pages[0]); PdfStructureElement paragraph2 = article.AppendChildElement(PdfStandardStructTypes.Paragraph); paragraph2.BeginMarkedContent(doc.Pages[0]); doc.Pages[0].Canvas.DrawString("Spire.PDF for .NET can be applied to easily convert Text, Image, SVG, HTML to PDF and convert PDF to Excel with C#/VB.NET in high quality.", font, brush, new Rectangle(40, 80, 480, 60), format); paragraph2.EndMarkedContent(doc.Pages[0]); PdfStructureElement figure1 = article.AppendChildElement(PdfStandardStructTypes.Figure); //Set Alternate text figure1.Alt = "replacement text1"; figure1.BeginMarkedContent(doc.Pages[0], null); PdfImage image = PdfImage.FromFile(@"E-logo.png"); doc.Pages[0].Canvas.DrawImage(image, new PointF(40, 200), new SizeF(100, 100)); figure1.EndMarkedContent(doc.Pages[0]); PdfStructureElement figure2 = article.AppendChildElement(PdfStandardStructTypes.Figure); //Set Alternate text figure2.Alt = "replacement text2"; figure2.BeginMarkedContent(doc.Pages[0], null); doc.Pages[0].Canvas.DrawRectangle(PdfPens.Black, new Rectangle(300, 200, 100, 100)); figure2.EndMarkedContent(doc.Pages[0]); //Save to file String result = "CreatePDFUAFile_result.pdf"; doc.SaveToFile(result); doc.Close(); |
Bug | SPIREPDF-4227 | タイムスタンプサーバを使用して、PDFドキュメントに署名する際に、アプリケーションが「System.NotSupportedException」をスローする問題が修正されました。 |
Bug | SPIREPDF-4596 | PDFからExcelファイルに変化した後、コンテンツフォーマットが正しくない問題が修正されました。 |
Bug | SPIREPDF-5214 | PDFをSVGに変換する際に、アプリケーションが「System.NullReferenceException」をスローする問題が修正されました。 |
Bug | SPIREPDF-5247 | PDFファイルを印刷した後、スタンプのコンテンツフォーマットが正しくない問題が修正されました。 |
Bug | SPIREPDF-5266 | PDFファイルのテキストを検索するのに時間がかかる問題を最適化しました。 |
Bug | SPIREPDF-5277 | ReplaceAllText()関数が有効でない問題が修正されました。 |
Bug | SPIREPDF-5292 | Html文字列を描画するためにDrawString()メソッドを最適化しました。 |
Bug | SPIREPDF-5314 | RemoveCustomProperty()関数の効果が正しくない問題が修正されました。 |
Bug | SPIREPDF-5317 | PDF画像を圧縮するときに、アプリケーションが「System.OutOfMemoryException」をスローする問題が修正されました。 |
Bug | SPIREPDF-5318 | u3dファイルからPDFへ変換した後、PDFを開くことができなかった問題が修正されました。 |
Bug | SPIREPDF-5319 | 圧縮画像のサイズが正しくない問題が修正されました。 |
Bug | SPIREPDF-5330 | PDFを画像に変換した後、PDFファイルのQRコードが正しくない問題が修正されました。 |
Bug | SPIREPDF-5331 | PDF/Aファイルからテキストを抽出する際に、アプリケーションが「System.NullReferenceException」をスローする問題が修正されました。 |
Bug | SPIREPDF-5333 | PDFファイルからテキストが見つからない問題が修正されました。 |
Bug | SPIREPDF-5336 | PDFファイルをロードして直接保存した後に、アプリケーションが「Invalid year in date string」をスローする問題が修正されました。 |
Bug | SPIREPDF-5351 | PDFファイルを印刷した後、内容が失われる問題が修正されました。 |
Bug | SPIREPDF-5305 | PDFファイルをマージする際に、アプリケーションが「System.IndexOutOfRangeException」をスローする問題が修正されました。 |
Spire.PDFViewer
カテゴリー | ID | 説明 |
Bug | SPIREPDFVIEWER-492 | ドキュメントの読み込み時間を最適化しました。 |
Bug | SPIREPDFVIEWER-542 | ドキュメントをプレビューする際に、内容が空白になっていた問題が修正されました。 |
Bug | SPIREPDFVIEWER-547 | PDFを回転させた際に、 アプリケーションが「value can not be null」をスローする問題を修正しました。 |
Bug | SPIREPDFVIEWER-551 | ドキュメントをプレビューする際に、スタンプが失われていた問題が修正されました。 |
Spire.XLS
カテゴリー | ID | 説明 |
New feature | SPIREXLS-3944 | DataTable のエクスポート時にデータを保持するかどうかを設定する数値フォーマットをサポートしました。 ExportTableOptions options = new ExportTableOptions();
ExportTableOptions options = new ExportTableOptions(); options.KeepDataFormat = false; DataTable table = sheet.ExportDataTable(1, 1, sheet.LastDataRow, sheet.LastDataColumn, options); |
New feature | - | 「UNICODE」 数式の計算をサポートされていました。 |
Bug | SPIREXLS-3902 | ExcelをPDF に変換した後、透視表の列名の位置がずれる問題を修正しました。 |
Bug | SPIREXLS-3957 | HTML をロードするときに、アプリケーションが「System. FormatException:Input string was not in a correct format」をスローする問題を修正しました。 |
Bug | SPIREXLS-3966 | 数式を挿入した後、数式が結果を計算しない問題を修正しました。 |
Bug | SPIREXLS-3967 | 「CellRange.DisplayedText」プロパティが正しくない値を取得する問題を修正しまました。 |
Bug | SPIREXLS-3971 | Excel を PDF に変換するときに、アプリケーションが「System.FormatException: この文字列は有効なDateTimeとして認識されない」をスローする問題を修正しました。 |
Bug | SPIREXLS-3972 | 連続していない範囲を取得するネームマネージャが null ポインター例外をスローする問題を修正しました。 |
Spire.Presentation
カテゴリー | ID | 説明 |
New feature | SPIREPPT-1965 | スライド画像の切り抜きをサポートしました。
SlidePicture slidePicture = (SlidePicture)presentation.Slides[0].Shapes[0]; slidePicture.Crop(float x, float y, float width, float height); |
New feature | SPIREPPT-1984 | ファイルストリームからスライドに画像を挿入するInsertPicture(stream)メソッドを提供しました。
presentation.Slides[0].Shapes[0].InsertPicture(Stream stream) |
New feature | - | PowerPoint 2016の新たに追加されたグラフ・タイプの作成をサポートしました、すなわちWaterfall、Treemap、Boxandwhisker、SunBurst、ヒストグラム、パレート。
public void CreateWaterFall(Presentation ppt) { IChart chart = ppt.Slides[0].Shapes.AppendChart(ChartType.WaterFall, new RectangleF(50, 50, 500, 400), false); chart.ChartData[0, 1].Text = "Series 1"; string[] categories = { "Category 1", "Category 2", "Category 3", "Category 4", "Category 5", "Category 6", "Category 7" }; for (int i = 0; i < categories.Length; i++) { chart.ChartData[i + 1, 0].Text = categories[i]; } double[] values = { 100, 20, 50, -40, 130, -60, 70 }; for (int i = 0; i < values.Length; i++) { chart.ChartData[i + 1, 1].NumberValue = values[i]; } chart.Series.SeriesLabel = chart.ChartData[0, 1, 0, 1]; chart.Categories.CategoryLabels = chart.ChartData[1, 0, categories.Length, 0]; chart.Series[0].Values = chart.ChartData[1, 1, values.Length, 1]; ChartDataPoint chartDataPoint = new ChartDataPoint(chart.Series[0]); chartDataPoint.Index = 2; chartDataPoint.SetAsTotal = true; chart.Series[0].DataPoints.Add(chartDataPoint); ChartDataPoint chartDataPoint2 = new ChartDataPoint(chart.Series[0]); chartDataPoint2.Index = 5; chartDataPoint2.SetAsTotal = true; chart.Series[0].DataPoints.Add(chartDataPoint2); chart.Series[0].ShowConnectorLines = true; chart.Series[0].DataLabels.LabelValueVisible = true; chart.ChartLegend.Position = ChartLegendPositionType.Right; chart.ChartTitle.TextProperties.Text = "WaterFall"; } public void CreateTreeMap(Presentation ppt) { IChart chart = ppt.Slides[0].Shapes.AppendChart(ChartType.TreeMap, new RectangleF(50, 50, 500, 400), false); chart.ChartData[0, 3].Text = "Series 1"; string[,] categories = {{"Branch 1","Stem 1","Leaf 1"},{"Branch 1","Stem 1","Leaf 2"},{"Branch 1","Stem 1", "Leaf 3"}, {"Branch 1","Stem 2","Leaf 4"},{"Branch 1","Stem 2","Leaf 5"},{"Branch 1","Stem 2","Leaf 6"},{"Branch 1","Stem 2","Leaf 7"}, {"Branch 2","Stem 3","Leaf 8"},{"Branch 2","Stem 3","Leaf 9"},{"Branch 2","Stem 4","Leaf 10"},{"Branch 2","Stem 4","Leaf 11"}, {"Branch 2","Stem 5","Leaf 12"},{"Branch 3","Stem 5","Leaf 13"},{"Branch 3","Stem 6","Leaf 14"},{"Branch 3","Stem 6","Leaf 15"}}; for (int i = 0; i < 15; i++) { for (int j = 0; j < 3; j++) chart.ChartData[i + 1, j].Text = categories[i, j]; } double[] values = { 17, 23, 48, 22, 76, 54, 77, 26, 44, 63, 10, 15, 48, 15, 51 }; for (int i = 0; i < values.Length; i++) { chart.ChartData[i + 1, 3].NumberValue = values[i]; } chart.Series.SeriesLabel = chart.ChartData[0, 3, 0, 3]; chart.Categories.CategoryLabels = chart.ChartData[1, 0, values.Length, 2]; chart.Series[0].Values = chart.ChartData[1, 3, values.Length, 3]; chart.Series[0].DataLabels.CategoryNameVisible = true; chart.Series[0].TreeMapLabelOption = TreeMapLabelOption.Banner; chart.ChartTitle.TextProperties.Text = "TreeMap"; chart.HasLegend = true; chart.ChartLegend.Position = ChartLegendPositionType.Top; } public void CreateSunBurs(Presentation ppt) { IChart chart = ppt.Slides[0].Shapes.AppendChart(ChartType.SunBurst, new RectangleF(50, 50, 500, 400), false); chart.ChartData[0, 3].Text = "Series 1"; string[,] categories = {{"Branch 1","Stem 1","Leaf 1"},{"Branch 1","Stem 1","Leaf 2"},{"Branch 1","Stem 1", "Leaf 3"}, {"Branch 1","Stem 2","Leaf 4"},{"Branch 1","Stem 2","Leaf 5"},{"Branch 1","Leaf 6",null},{"Branch 1","Leaf 7", null}, {"Branch 2","Stem 3","Leaf 8"},{"Branch 2","Leaf 9",null},{"Branch 2","Stem 4","Leaf 10"},{"Branch 2","Stem 4","Leaf 11"}, {"Branch 2","Stem 5","Leaf 12"},{"Branch 3","Stem 5","Leaf 13"},{"Branch 3","Stem 6","Leaf 14"},{"Branch 3","Leaf 15",null}}; for (int i = 0; i < 15; i++) { for (int j = 0; j < 3; j++) chart.ChartData[i + 1, j].Value = categories[i, j]; } double[] values = { 17, 23, 48, 22, 76, 54, 77, 26, 44, 63, 10, 15, 48, 15, 51 }; for (int i = 0; i < values.Length; i++) { chart.ChartData[i + 1, 3].NumberValue = values[i]; } chart.Series.SeriesLabel = chart.ChartData[0, 3, 0, 3]; chart.Categories.CategoryLabels = chart.ChartData[1, 0, values.Length, 2]; chart.Series[0].Values = chart.ChartData[1, 3, values.Length, 3]; chart.Series[0].DataLabels.CategoryNameVisible = true; chart.ChartTitle.TextProperties.Text = "SunBurst"; chart.HasLegend = true; chart.ChartLegend.Position = ChartLegendPositionType.Top; } public void CreatePareto(Presentation ppt) { IChart chart = ppt.Slides[0].Shapes.AppendChart(ChartType.Pareto, new RectangleF(50, 50, 500, 400), false); chart.ChartData[0, 1].Text = "Series 1"; string[] categories = { "Category 1", "Category 2", "Category 4", "Category 3", "Category 4", "Category 2", "Category 1", "Category 1", "Category 3", "Category 2", "Category 4", "Category 2", "Category 3", "Category 1", "Category 3", "Category 2", "Category 4", "Category 1", "Category 1", "Category 3", "Category 2", "Category 4", "Category 1", "Category 1", "Category 3", "Category 2", "Category 4", "Category 1"}; for (int i = 0; i < categories.Length; i++) { chart.ChartData[i + 1, 0].Text = categories[i]; } double[] values = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }; for (int i = 0; i < values.Length; i++) { chart.ChartData[i + 1, 1].NumberValue = values[i]; } chart.Series.SeriesLabel = chart.ChartData[0, 1, 0, 1]; chart.Categories.CategoryLabels = chart.ChartData[1, 0, categories.Length, 0]; chart.Series[0].Values = chart.ChartData[1, 1, values.Length, 1]; chart.PrimaryCategoryAxis.IsBinningByCategory = true; chart.Series[1].Line.FillFormat.FillType = FillFormatType.Solid; chart.Series[1].Line.FillFormat.SolidFillColor.Color = Color.Red; chart.ChartTitle.TextProperties.Text = "Pareto"; chart.HasLegend = true; chart.ChartLegend.Position = ChartLegendPositionType.Bottom; } public void CreateHistogram(Presentation ppt) { IChart chart = ppt.Slides[0].Shapes.AppendChart(ChartType.Histogram, new RectangleF(50, 50, 500, 400), false); chart.ChartData[0, 0].Text = "Series 1"; double[] values = { 1, 1, 1, 3, 3, 3, 3, 5, 5, 5, 8, 8, 8, 9, 9, 9, 12, 12, 13, 13, 17, 17, 17, 19, 19, 19, 25, 25, 25, 25, 25, 25, 25, 25, 29, 29, 29, 29, 32, 32, 33, 33, 35, 35, 41, 41, 44, 45, 49, 49 }; for (int i = 0; i < values.Length; i++) { chart.ChartData[i + 1, 1].NumberValue = values[i]; } chart.Series.SeriesLabel = chart.ChartData[0, 0, 0, 0]; chart.Series[0].Values = chart.ChartData[1, 0, values.Length, 0]; chart.PrimaryCategoryAxis.NumberOfBins = 7; chart.PrimaryCategoryAxis.GapWidth = 20; chart.ChartTitle.TextProperties.Text = "Histogram"; chart.ChartLegend.Position = ChartLegendPositionType.Bottom; } public void CreateBoxAndWhisker(Presentation ppt) { IChart chart = ppt.Slides[0].Shapes.AppendChart(ChartType.BoxAndWhisker, new RectangleF(50, 50, 500, 400), false); string[] seriesLabel = { "Series 1", "Series 2", "Series 3" }; for (int i = 0; i < seriesLabel.Length; i++) { chart.ChartData[0, i + 1].Text = "Series 1"; } string[] categories = {"Category 1", "Category 1", "Category 1", "Category 1", "Category 1", "Category 1", "Category 1", "Category 2", "Category 2", "Category 2", "Category 2", "Category 2", "Category 2", "Category 3", "Category 3", "Category 3", "Category 3", "Category 3"}; for (int i = 0; i < categories.Length; i++) { chart.ChartData[i + 1, 0].Text = categories[i]; } double[,] values = new double[18, 3]{{-7,-3,-24},{-10,1,11},{-28,-6,34},{47,2,-21},{35,17,22},{-22,15,19},{17,-11,25}, {-30,18,25},{49,22,56},{37,22,15},{-55,25,31},{14,18,22},{18,-22,36},{-45,25,-17}, {-33,18,22},{18,2,-23},{-33,-22,10},{10,19,22}}; for (int i = 0; i < seriesLabel.Length; i++) { for (int j = 0; j < categories.Length; j++) { chart.ChartData[j + 1, i + 1].NumberValue = values[j, i]; } } chart.Series.SeriesLabel = chart.ChartData[0, 1, 0, seriesLabel.Length]; chart.Categories.CategoryLabels = chart.ChartData[1, 0, categories.Length, 0]; chart.Series[0].Values = chart.ChartData[1, 1, categories.Length, 1]; chart.Series[1].Values = chart.ChartData[1, 2, categories.Length, 2]; chart.Series[2].Values = chart.ChartData[1, 3, categories.Length, 3]; chart.Series[0].ShowInnerPoints = false; chart.Series[0].ShowOutlierPoints = true; chart.Series[0].ShowMeanMarkers = true; chart.Series[0].ShowMeanLine = true; chart.Series[0].QuartileCalculationType = QuartileCalculation.ExclusiveMedian; chart.Series[1].ShowInnerPoints = false; chart.Series[1].ShowOutlierPoints = true; chart.Series[1].ShowMeanMarkers = true; chart.Series[1].ShowMeanLine = true; chart.Series[1].QuartileCalculationType = QuartileCalculation.InclusiveMedian; chart.Series[2].ShowInnerPoints = false; chart.Series[2].ShowOutlierPoints = true; chart.Series[2].ShowMeanMarkers = true; chart.Series[2].ShowMeanLine = true; chart.Series[2].QuartileCalculationType = QuartileCalculation.ExclusiveMedian; chart.HasLegend = true; chart.ChartTitle.TextProperties.Text = "BoxAndWhisker"; chart.ChartLegend.Position = ChartLegendPositionType.Top; } |