2017-03-09 1 views
0

J'ai un problème que j'ai un tableau Excel que je veux l'insérer dans un document Word, en utilisant Microsoft.Interop.Word.Comment intégrer un fichier Excel dans un document Word en utilisant Microsoft.Interop.Word?

Je l'ai déjà essayé celui-ci:

var path = Directory.GetParent(Directory.GetCurrentDirectory()).Parent?.FullName + @"\Documents\Businessprocess\Excel-Templates\Tabelle_zum_BP.xlsx"; 
var oIconLabel = "Tabelle zum BP"; 
var oMissing = System.Reflection.Missing.Value; 
var oIconFileName = oMissing; 
var oFileDesignInfo = path; 
var oClassType = "Word.Document.8"; 

_wordDocument.Bookmarks["EPExcelFile"].Range.InlineShapes.AddOLEObject(
     oClassType, oFileDesignInfo, false, true, oIconFileName, oMissing, oIconLabel, oMissing); 

Je suis arrivé cette solution à partir d'un autre thread sur ce site. Le seul problème est qu'il insère la table Excel maintenant comme ceci:

Image

Comment puis-je insérer la table afin qu'il soit montré directement, et non sur une icône?
J'ai besoin d'une solution où la table Excel n'est pas liée à la table des mots, de sorte que si je modifie la table Excel, celle du mot ne devrait pas être affectée.

+0

AFAIK Si vous souhaitez insérer un tableau Excel sans référence à ce , Vous devez l'ajouter comme un objet;). –

Répondre

2

Vous pouvez simplement utiliser la méthode Range.PasteExcelTable pour obtenir ce que vous avez besoin:

var path = Directory.GetParent(Directory.GetCurrentDirectory()).Parent?.FullName + @"\Documents\Businessprocess\Excel-Templates\Tabelle_zum_BP.xlsx"; 
var excel = (Excel.Application)new Excel.ApplicationClass() { Visible = true }; 
var template = excel.Workbooks.Add(path); 
var worksheet = (Excel.Worksheet)template.Worksheets["__SHEET_NAME__"]; 
var table = (Excel.Range)worksheet.Range["__RANGE__"]; 

table.Copy(); 
_wordDocument.Bookmarks["EPExcelFile"].Range.PasteExcelTable(false, true, false); 

Si vous se demandent:

using Word = Microsoft.Office.Interop.Word; 
using Excel = Microsoft.Office.Interop.Excel; 
+0

Comment le Range.PastExcelTable sait-il quelle Excel-Table je veux insérer? – Snaylor

+0

Vous spécifiez la 'table' que vous voulez insérer au préalable. – Xiaoy312

+0

'var table = (Excel.Range) worksheet.Range [" __ RANGE __ "];' Et que dois-je insérer ici pour "Range"? Désolé de poser des questions stupides, mais j'ai encore mes problèmes ... – Snaylor