C # — копирование Excel в Word с помощью Interop

#c# #excel #ms-word #office-interop

#c# #excel #ms-word #office-interop

Вопрос:

Я хочу скопировать Excel в Word в виде изображения без использования буфера обмена.

Пользователю слишком легко манипулировать буфером обмена во время работы программы, и иногда он пропускает элементы.

Как мне это сделать?

Вот как я справляюсь с этим сейчас

 foreach (Worksheet WS in WB.Worksheets)
                {
                    progresspercent  = steps;
                    worker.ReportProgress(progresspercent);

                    if (WS.UsedRange.Count > 1 amp;amp; WS != null)
                    {
                        Thread.Sleep(1000);
                        var height = WS.UsedRange.Height;
                        var width = WS.UsedRange.Width;
                        var MaxHeight = ((double)width * 8.5) / 6.5;
                        var heightRatio= (double)height/MaxHeight;
                        double TotalHeight = 0;
                        int RowsSoFar = 0;

                        int TotalRows = WS.UsedRange.Rows.Count;

                        int RowStart = 1;
                        int RowEnd = RowStart   (int)Math.Floor(TotalRows/heightRatio);
                        if (RowEnd > TotalRows   1) { RowEnd = TotalRows   1; }

                        ///Calculate Image sizes and size copy for page
                        while (TotalRows > RowsSoFar)
                        {

                            Range CopyRange = WS.Range["A"   RowStart.ToString()   ":F"   RowEnd.ToString()];
                            double  SelectionHeight = (double)CopyRange.Height;

                            while (SelectionHeight > MaxHeight )
                            {
                                //***************************************//
                                RowEnd = RowEnd - 1;
                                CopyRange = WS.Range["A"   RowStart.ToString()   ":F"   RowEnd.ToString()];
                                SelectionHeight = (double)CopyRange.Height; 
                            }
                             
                            FullWordDoc.Words.Last.InsertBreak(Microsoft.Office.Interop.Word.WdBreakType.wdPageBreak);
                            string ContinuedPrompt = "";
                            if (RowStart!=1) { ContinuedPrompt = " (Continued)"; }

                            FullWordDoc.Words.Last.InsertAfter(WS.Name   ContinuedPrompt   "r");
                            CopyRange.CopyPicture();
                            
                            
                            FullWordDoc.Words.Last.Paste();
                            
                            

                            Console.WriteLine(WS.Name);
                            RowsSoFar = RowsSoFar   RowEnd - RowStart   1;
                            RowStart = RowEnd   1;
                            RowEnd = RowStart   (int)Math.Floor(TotalRows / heightRatio);
                            if (RowEnd > TotalRows   1) { RowEnd = TotalRows   1; }
                        }
                    }
                }
  

Комментарии:

1. Работает ли ваш код; если нет, можете ли вы сказать, в чем проблема.

2. @PeterSmith Код работает, но я бы предпочел напрямую поместить диаграмму в Word вместо копирования и вставки. когда пользователи пытаются скопировать другие данные, они в конечном итоге вставляются в документ Word.

3. Вы можете вставить ссылку из электронной таблицы Excel в документ Word. Смотрите здесь .

4. Проблема в том, что нет стандартного способа масштабирования диаграммы, если я добавлю ее в word. По крайней мере, с изображением я могу убедиться, что оно соответствует странице.