2

これが私の最初の質問です。Visual Studio 2010 を使用しており、販売カタログ用の Excel アドインを設計したいと考えています。2 つの形式があり、そのうちの 1 つが機能しましたが、もう 1 つは機能しませんでした。私が達成したいのは、アドインを介して Windows フォームを開き、フォームを介して Access データベースからデータを取得することです。データをデータグリッドにインポートしてから、データを Excel にエクスポートします。

この部分は機能しましたが、次のフォームに問題があります。そのフォームで 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];

前もって感謝します。

4

3 に答える 3

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);
于 2012-06-28T11:22:52.167 に答える
0

2つのOfficeアプリケーション間でコピーするため、組み込みのPasteExcelTableメソッドを使用することをお勧めします。MicrosoftWord1x.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);
于 2012-06-25T18:39:04.397 に答える
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;
        }
于 2015-12-17T15:48:58.643 に答える