用c# 可以利用书签的方式在word文档中生成折线图,使用的是using Microsoft.Office.Interop.Word;
using Microsoft.Office.Interop.Graph;两个库文件,数据能传到word里,但是生成折线过程出错,本人基础薄弱,请帮忙看看什么原因
//生成书签
private void button3_Click(object sender, EventArgs e)
{
var dt = ConvertDgvDataToTable(dataGridView1);
Microsoft.Office.Interop.Word.Application app = new Microsoft.Office.Interop.Word.Application();
Microsoft.Office.Interop.Word.Document doc = app.Documents.Add("D:\\Test.docx");
app = doc.Application;
doc.ActiveWindow.Visible = true;
InsertGraphtoBookmark("图表", dt, ref doc, ref app);
}
public Microsoft.Office.Interop.Graph.XlChartType ChartType = Microsoft.Office.Interop.Graph.XlChartType.xlLine;
public void InsertGraphtoBookmark(string strbookmark, System.Data.DataTable dt, ref Microsoft.Office.Interop.Word.Document wDoc, ref Microsoft.Office.Interop.Word.Application WApp)
{
int i, j;
object missing = System.Reflection.Missing.Value;
object oClassType = "MSGraph.Chart.8";
//获取书签对象,换句话,把光标移过来
object bookmark = strbookmark;
WApp.ActiveDocument.Bookmarks.get_Item(ref bookmark).Select();
//WApp.Selection.InlineShapes[0].OLEFormat.Open();
//初始化一张图表
Microsoft.Office.Interop.Graph.Chart wdChart =
(Microsoft.Office.Interop.Graph.Chart)WApp.Selection.InlineShapes.AddOLEObject(ref oClassType, ref missing,
ref missing, ref missing, ref missing,
ref missing, ref missing, ref missing).OLEFormat.Object;
//wrdChart.Application.Visible = false;
//改变图表格式
wdChart.ChartType = ChartType;
wdChart.Application.PlotBy = Microsoft.Office.Interop.Graph.XlRowCol.xlColumns;//根据Y轴来画图表
Microsoft.Office.Interop.Graph.Axis axis = (Microsoft.Office.Interop.Graph.Axis)wdChart.Axes(1, 1);//设置X轴的属性
wdChart.Application.DataSheet.Cells.Clear();//清空表格的初始数据
//填充图表数据,起始的行号和列号都是1
for (i = 0; i < dt.Columns.Count; i++)//初始化列名
{
wdChart.Application.DataSheet.Cells[1, i + 1] = dt.Columns[i].ColumnName;
}
for (i = 0; i < dt.Rows.Count; i++)//填充数据
{
for (j = 0; j < dt.Columns.Count; j++)
{
wdChart.Application.DataSheet.Cells[i + 2, j + 1] = dt.Rows[i][j].ToString();
}
}
//axis.MaximumScale = 1;//X轴最大刻度
//axis.MajorUnit = 0.1;
wdChart.Legend.Delete();
wdChart.Width = 500;
//wrdChart.Height = 666;
//oShape.Height = oWord.InchesToPoints(3.57f);
//更新图表并保存退出
wdChart.Application.Update();
wdChart.Application.Quit();
}
public static System.Data.DataTable ConvertDgvDataToTable(DataGridView dgv)
{
System.Data.DataTable dt = new System.Data.DataTable();
for (int count = 0; count < dgv.Columns.Count; count++)//循环DataGridView中的栏位
{
DataColumn dc = new DataColumn(dgv.Columns[count].Name.ToString());
dt.Columns.Add(dc);// 将DataGridView中栏位的标题写入到DataTable中
}
for (int count = 0; count < dgv.Rows.Count - 1; count++)//循环DataGridView中的资料行
{
DataRow dr = dt.NewRow();
for (int countsub = 0; countsub < dgv.Columns.Count; countsub++)
{
dr[countsub] = dgv.Rows[count].Cells[countsub].Value.ToString();
}
dt.Rows.Add(dr);
}
return dt;
}
//生成曲线
private void button4_Click(object sender, EventArgs e)
{
var dt = ConvertDgvDataToTable(dataGridView1);
chart1.DataSource = dt;
chart1.Series[0].XValueMember = "CountryCode";//每周的字段显示在X轴
chart1.Series[0].YValueMembers = "CityCode";//每周对应的sum和显示在y轴
chart1.ChartAreas["ChartArea1"].AxisX.MajorGrid.Interval = 1;
chart1.ChartAreas["ChartArea1"].AxisX.LabelStyle.Interval = 1;
this.chart1.ChartAreas["ChartArea1"].AxisX.Title = "电压";//X轴标题
this.chart1.ChartAreas["ChartArea1"].AxisY.Title = "转速";//X轴标题
this.chart1.ChartAreas["ChartArea1"].AxisX.MajorGrid.Enabled = false;//不显示竖着的分割线
this.chart1.ChartAreas["ChartArea1"].AxisY.MajorGrid.Enabled = false;//不显示竖着的分割线
this.chart1.Series[0].IsValueShownAsLabel = true;//显示坐标值
this.chart1.DataBind();
}
private void button5_Click(object sender, EventArgs e)
{
Microsoft.Office.Interop.Word.Application app = new Microsoft.Office.Interop.Word.Application();
Word.Document doc = app.Documents.Add("D:\\Test.docx");
app = doc.Application;
doc.ActiveWindow.Visible = true;
foreach (Word.Bookmark bk in doc.Bookmarks)
{
if (bk.Name == "图表")
{
object oClassType = "MSGraph.Chart.8";
Graph.Axis axis;//x坐标
Word.Range range = bk.Range;
Graph.Chart wdchart = (Graph.Chart)range.InlineShapes.AddOLEObject(oClassType).OLEFormat.Object;
wdchart.Application.DataSheet.Cells.Clear();//清空数据集数据
//axis.MaximumScale = 1;//设置最大刻度
//填充数据集
int i, j;
for (i = 0; i < 2; i++)
{
wdchart.Application.DataSheet.Cells[i + 1, 1] = "列" + i.ToString();
}
for (i = 0; i < 2; i++)//填充数据
{
for (j = 0; j < 2; j++)
{
wdchart.Application.DataSheet.Cells[i + 2, j + 1] = i * j;
}
}
//根据y轴画图
wdchart.Application.PlotBy = Graph.XlRowCol.xlColumns;
wdchart.Legend.Delete();
wdchart.Height = 280;
wdchart.Width = 600;
//更新图标并退出
wdchart.Application.Update();
wdchart.Application.Quit();
wdchart = null;
}
}
//doc.SaveAs("E:\\Test.docx");
//app.Quit();
}