Перенос данных из Excel в Word с помощью Visual Studio 2010 – С#

Вопрос:Это мой первый вопрос. Я использую Visual Studio 2010, и я хочу создать Excel Addin для каталога продаж. Он имеет две формы, и у меня есть один из них, но другой нет. Я хочу добиться того, что я открываю форму Windows через Addin и через форму, которую я получаю из базы данных Access. Я импортирую

Вопрос:

Это мой первый вопрос. Я использую Visual Studio 2010, и я хочу создать Excel Addin для каталога продаж. Он имеет две формы, и у меня есть один из них, но другой нет. Я хочу добиться того, что я открываю форму Windows через Addin и через форму, которую я получаю из базы данных Access. Я импортирую данные в datagrid, а затем экспортирую данные в Excel.

Я получил эту часть, но у меня проблемы с моей следующей формой. В этой форме я хочу открыть шаблон Word (когда я нажимаю кнопку), а затем данные из открытого файла Excel переносятся в документ Word.
Кто-нибудь знает, что было бы лучшим способом сделать это?
Я использую OleDBConnection, чтобы получить данные из базы данных в datagrid. Я разрабатываю это для Office 2007, и я программирую на С#.

Вот часть моего кода. Я использую эту часть, чтобы получить данные из файла 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];

Спасибо заранее.

Ответ №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); Ответ №2

Поскольку вы копируете между двумя приложениями Office, я бы рекомендовал использовать встроенный PasteExcelTable Method. Просто добавьте ссылку на библиотеку объектов Microsoft Word 1x.0:

using Word = Microsoft.Office.Interop.Word; … string workbookPath = @»C:tempexample.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); Ответ №3

Следуйте приведенному ниже коду, чтобы скопировать активные ячейки из 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; }

Оцените статью
Добавить комментарий