#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. По крайней мере, с изображением я могу убедиться, что оно соответствует странице.