2012-06-25 67 views
2

這是我的第一個問題。我使用的是Visual Studio 2010,我想爲銷售目錄設計一個Excel Addin。它有兩種形式,我得到其中一個工作,但另一個沒有。我想實現的是,我通過Addin和通過表單從Access數據庫獲取數據來打開Windows窗體。我將數據導入到數據網格中,然後將數據導出到Excel。使用Visual Studio 2010將數據從Excel傳輸到Word - C#

我得到了這部分工作,但我有我的下一個表格的問題。在這種形式下,我想打開Word模板(當我按下按鈕時),然後將打開的Excel文件中的數據傳輸到我的Word文檔中。 有沒有人知道什麼是最好的方法來做到這一點? 我使用OleDBConnection從數據庫中獲取數據到數據網格。我正在爲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]; 

在此先感謝。

回答

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); 
+0

謝謝非常感謝你的回答,我會看看這個。 – Steini

+0

好吧,我試過你給我的代碼,但它不會將數據粘貼到Word中。我需要添加一些東西嗎?謝謝。 – Steini

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); 
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; 
     } 
相關問題