使用Visual Studio 2010将数据从Excel传输到Word - C#

时间:2012-06-25 15:51:36

标签: c# asp.net excel-2007 word-2007

这是我的第一个问题。我正在使用Visual Studio 2010,我想为销售目录设计Excel Addin。它有两种形式,我让其中一种工作,但另一种不工作。我想要实现的是我通过Addin打开Windows表单,并通过表单从Access数据库中获取数据。我将数据导入数据网格,然后将数据导出到Excel。

我让这部分工作但我的下一个表格有问题。在该表单中,我想打开Word模板(当我按下按钮时),然后打开的Excel文件中的数据被传输到我的Word文档中。 有谁知道最好的方法是什么? 我使用OleDBConnection将数据从数据库获取到datagrid。我正在为Office 2007设计这个,我用C#编程。

这是我的代码的一部分。我使用此部分将Excel文件中的数据导入DataGrid,但我希望能够将该数据导入WordDocument。 有谁知道最好的方法是什么。

DataSet da = new DataSet();
OleDbDataAdapter adapter = new OleDbDataAdapter();
string workbookPath = "C:myfile.xlsx";

Excel.Workbook wb = Globals.ThisAddIn.Application.Workbooks.Add(workbookPath);
string ConnectionString =
    @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + workbookPath
    + @";Extended Properties=""Excel 12.0 Macro;HDR=Yes;ImpoertMixedTypes=Text;TypeGuessRows=0""";

OleDbConnection conn = new OleDbConnection(ConnectionString);
string strCmd = " select * from [Sheet1$A1:D4]"; //Or some other range
OleDbCommand cmd = new OleDbCommand(strCmd, conn);

conn.Open();
da.Clear();
adapter.SelectCommand = cmd;
adapter.Fill(da);
dataGridView1.DataSource = da.Tables[0];

提前致谢。

3 个答案:

答案 0 :(得分:1)

好的,所以在jmh_gr的帮助下,我设法让这个工作。这是它的外观。它基本上完成它应该做的事情,从Excel复制数据并将其粘贴到Word。

object fileName = "C:\\Template_1.docx";
string workbookPath = "C:\\Book1.xlsx";
Excel.Workbook wb = Globals.ThisAddIn.Application.Workbooks.Add(workbookPath);
Excel.Worksheet ws = wb.Worksheets[1];
ws.Range["A1:D4"].Copy();

object missing = System.Reflection.Missing.Value;
Word.Application wordApp = Marshal.GetActiveObject("Word.Application") as Word.Application;
Word.Document doc;
Word.Range rng;
doc = wordApp.ActiveDocument;
rng = wordApp.Selection.Range;

object objDataTypeMetafile = Word.WdPasteDataType.wdPasteRTF;
rng.PasteSpecial(ref missing, ref missing,
ref missing, ref missing, ref objDataTypeMetafile,
ref missing, ref missing);

答案 1 :(得分:0)

由于您在两个Office应用程序之间进行复制,我建议您使用内置的PasteExcelTable Method。只需添加对Microsoft Word 1x.0对象库的引用:

using Word = Microsoft.Office.Interop.Word;
...

string workbookPath = @"C:\temp\example.xlsx";
Excel.Workbook wb = Globals.ThisAddIn.Application.Workbooks.Add(workbookPath);
Excel.Worksheet ws = wb.Worksheets[1];
Word.Application wdApp = new Word.Application();
Word.Document wdDoc = wdApp.Documents.Add();
ws.Range["A1:D4"].Copy();
wdDoc.ActiveWindow.Selection.PasteExcelTable(false, false, false);

答案 2 :(得分:0)

按照以下代码将活动单元格从Excel复制到Word(源格式将保持不变)

var applicationWord = new Microsoft.Office.Interop.Word.Application();
            applicationWord.Visible = true;
            Word.Document wordDoc = applicationWord.Documents.Add();
            var cells = getCells();
            var last_row = cells.Row;
            var last_col = cells.Column;
            var firstcell = activeWorksheet1.get_Range("A1", Type.Missing);
            var lastcell = (Excel.Range)activeWorksheet1.Cells[last_row, last_col];

            activeWorksheet.Range[firstcell, lastcell].Copy(); // All Active cell will get copied
            wordDoc.ActiveWindow.Selection.PasteExcelTable(false, false, false);

在代码下方获取工作表中的活动单元格:

dynamic getCells()
        {
        activeWorksheet1 = ((Excel.Worksheet)Application.ActiveSheet);
        var CellZ = activeWorksheet1.Cells.Find(
                "*",
                System.Reflection.Missing.Value, Excel.XlFindLookIn.xlValues,
                Excel.XlLookAt.xlWhole,
                Excel.XlSearchOrder.xlByRows,
                Excel.XlSearchDirection.xlPrevious,
                false,
                System.Reflection.Missing.Value,
                System.Reflection.Missing.Value);
            return CellZ;
        }