Excel.Worksheet sheet = null; Excel.Range range = null;
Contents
縦書きにしたセルを印刷の時に切れちゃうので大きくする
range = sheet.get_Range("A5"); range.RowHeight = range.Height + 30; range = null;
印刷可能サイズの取得(A4の場合)
double printable_height; double printable_width; double paper_height; double paper_width; if (sheet.PageSetup.Orientation == Excel.XlPageOrientation.xlPortrait) { //縦 297mm 1mm = 2.83pt; paper_height = 297 * 2.83; paper_width = 210 * 2.83; } else { //横 210mm 1mm = 2.83pt; paper_height = 210 * 2.83; paper_width = 297 * 2.83; } double BottomMargin = sheet.PageSetup.BottomMargin;//pt double TopMargin = sheet.PageSetup.TopMargin;//pt printable_height = paper_height - BottomMargin - TopMargin; double RightMargin = sheet.PageSetup.RightMargin;//pt double LeftMargin = sheet.PageSetup.LeftMargin;//pt printable_width = paper_width - RightMargin - LeftMargin; System.Diagnostics.Debug.Print("印刷可能高さ:" + printable_height.ToString() + "pt"); System.Diagnostics.Debug.Print("印刷可能幅:" + printable_width.ToString() + "pt");
ページ縮小率のチェック(横1ページ・縦自動の場合)
「印刷可能サイズの取得」から続きます
last_colnameに一番右のセル列を設定しておきます(ループで探してもよいが、時間がかかるのでどこかの処理で取得しておく)
例:last_colname = “AA”;
range = sheet.get_Range("A1", last_colname + "1"); last_col_x = range.Width; range = null; if (printable_width < last_col_x) { printable_height = printable_height * (last_col_x / printable_width); }
グラフや図を切れないように改ページさせる
セルの高さをグラフや図の大きさに変えてやれば縦で切られない。
同様に横で切られる場合にはセルの横サイズを大きくすればいい。
ただし、結合セルは不可。
単一セルにしたときのみ改ページで切られない。
↑こんなイメージ↓
chart_row = 10;//入れ込む行 chartwidth = 300; chartheight = 200; top_margin = 10; bottom_margin = 10; location_x = 10; location_y = sheet.get_Range("A" + chart_row).Top + top_margin; range = sheet.get_Range("A1"); range.RowHeight = chartheight + top_margin + bottom_margin; chart = sheet.ChartObjects().Add(location_x, location_y, chartwidth, chartheight);
散布図関連
一気にまとめるとこんな感じです。
最後のソースに問題点3つまとめています。
散布図グラフに使えるX軸、Y軸の設定
単純にrangeで”A1:B2″とかだとX軸Y軸の設定ができないので以降を参照してください。
XValuesとValuesを使用します。
散布図グラフの点の縁取り(枠線)を消す
マーカーをよく見ると縁取りになっているので同職を使って消します。
線を軟化いじるとマーカーからマーカーの間に線が入るので、
そうではない設定でツボりました。
◆ー◆の線ではなく◆の縁取り◇を同じ色にして消したかった。
X軸、Y軸のラベルを変える
既出ですがついでにです
まとめるとこんな感じ↓
//値A×値B chart_row = 10;//10行目に書く chart_margin_vertical = 10;//グラフの上下マージン location_x = sheet.Range["A"+ chart_row].Width / 2; location_y = sheet.get_Range("A" + chart_row, "A" + chart_row).Top + chart_margin_vertical / 2; chartwidth = 300; chart = sheet.ChartObjects().Add(location_x, location_y, chartwidth, chartHeight); chartpage = chart.Chart; chartrange = sheet.get_Range("A1:A2");//これはダミーレンジ chart.Placement = Excel.XlPlacement.xlFreeFloating;//グラフのサイズをセル幅に合わせて変更しない&場所を動かさない //グラフの作成 chartpage.SetSourceData(chartrange); chartpage.HasLegend = false; //凡例 chartpage.HasTitle = true; //タイトル chartpage.PlotArea.Format.Fill.ForeColor.RGB = Color.LightGray.ToArgb();//背景色 chartpage.PlotArea.Format.Line.ForeColor.RGB = Color.Black.ToArgb();//文字色 chartpage.ChartType = Excel.XlChartType.xlXYScatter; chartpage.ChartTitle.Format.TextFrame2.TextRange.Font.Size = standardFontSize; chartpage.ChartTitle.Text = "値A×値B"; chartpage.ChartGroups(1).GapWidth = 200; //データの場所は値Aが"A100:A200"、値Bが"B100:B200"とする start_row = 100; end_row = 200; tmp_objSeries = chartpage.SeriesCollection(1); tmp_objSeries.XValues = sheet.get_Range("A" + start_row + ":" + "A" + end_row); tmp_objSeries.Values = sheet.get_Range("B"+ start_row + ":" + "B"+ end_row); tmp_objSeries.MarkerBackgroundColor = ColorTranslator.ToWin32(Color.Blue);//マーカーの中 tmp_objSeries.MarkerForegroundColor = ColorTranslator.ToWin32(Color.Blue);//マーカーの外線 tmp_objSeries.MarkerSize = markersize; valueAxis = chartpage.Axes(Excel.XlAxisType.xlCategory, Excel.XlAxisGroup.xlPrimary); valueAxis.HasTitle = true; valueAxis.AxisTitle.Text = "値A"; valueAxis.TickLabels.NumberFormatLocal = "#0"; valueAxis = chartpage.Axes(Excel.XlAxisType.xlValue, Excel.XlAxisGroup.xlPrimary); valueAxis.HasTitle = true; valueAxis.AxisTitle.Text = "値B"; valueAxis.TickLabels.NumberFormatLocal = "#0";
短納期で必死だったから何をやったかも、うろ覚えだけど
備忘録として…です。
コメント