C# Excel Interop, метод CopyPicture класса Range не удался - PullRequest
0 голосов
/ 09 марта 2020

Я уже давно смотрю на это и не могу найти очевидной проблемы. У меня есть обновляемая рабочая книга, связанная с SQL. Мне нужно открыть рабочую книгу, обновить sh подключение для передачи данных, сохранить рабочую книгу, скопировать диапазон ячеек в виде изображения и вставить его в электронное письмо. Это работает примерно в 50% случаев, а остальные 50% я получаю ошибку CopyPicture method of Range class failed.

Любая помощь приветствуется.

Вот фрагмент кода:

namespace Scorecard
{
    class SpreadsheetRefresh
    {
        public void Execute() 
        {
          public Excel.Application xlApp;
          public Excel.Workbook xlWorkbook;
          public Excel.Worksheet xlWorksheet;
          DateTime reportDate = DateTime.Now.AddDays(-1).Date;
          string stringDate = reportDate.ToString("d");
          try
          {
            xlApp = new Excel.Application
            {
                Visible = true,
                DisplayAlerts = true
            };
            xlWorkbook = xlApp.Workbooks.Open("c:\workbook.xlsx");

            xlWorksheet = (Excel.Worksheet)xlWorkbook.Worksheets.get_Item("Report");
            xlWorksheet.Cells[3, 3] = stringDate;
            xlWorksheet.Cells[4, 3] = stringDate;

            var task = Task.Run(() => refreshWorkbook());
            if (!task.Wait(TimeSpan.FromSeconds(60)))
            {
                throw new Exception("The data refresh failed due to a timeout - please try again or refresh manually.");
            }

             Excel.Range StartCell = xlWorksheet.Cells[12, 2] as Excel.Range;
             Excel.Range EndCell = xlWorksheet.Cells[17, 21] as Excel.Range;
             Excel.Range ImageRange = xlWorksheet.Range[StartCell, EndCell] as Excel.Range;
             ImageRange.CopyPicture(Excel.XlPictureAppearance.xlScreen, Excel.XlCopyPictureFormat.xlBitmap);

             using (FileStream filestream = new FileStream(baseImageOneName, FileMode.Create))
             {
                    BitmapSource bitmapSource = Clipboard.GetData(DataFormats.Bitmap) as BitmapSource;
                    JpegBitmapEncoder encoder = new JpegBitmapEncoder();
                    encoder.Frames.Add(BitmapFrame.Create(bitmapSource));
                    encoder.QualityLevel = 100;
                    encoder.Save(filestream);
              }
              xlWorkbook.Save();
              xlWorkbook.Close(false);
              xlApp.Quit();

          } 
          catch (Exception ex)
          {
               throw new Exception(ex.Message);
          }
       }
    }
 }

1 Ответ

0 голосов
/ 09 марта 2020

Вот почему у меня есть слова "Отказаться от данных электронной почты" в моей инструкции по приборам. Пользователи ожидают, что они получат уведомления «система pu sh», но системы pu sh являются центральной точкой отказа. Когда ваш процесс завершается неудачей по какой-либо причине, отличной от обнаруженной вами непосредственной проблемы, например, из-за сбоя в сети или блокировки файла, пользователи будут ожидать, что вы диагностируете его и, возможно, примете ошибку. Не позволяйте им снимать с себя ответственность проверять свои данные на вас.

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

Основы c определение контрольно-измерительных приборов

https://en.wikipedia.org/wiki/Instrumentation

Инструментарий Инструментов

http://www.powersemantics.com/e.html

  • Не интегрировано (в производственный процесс)
  • Только первичные данные - не изображения данных
  • Не извлекайте данные sh
  • Упорядочить по процессу
  • Немедленные оповещения
  • Никогда не в сети

Важно отделить ответственность за создание электронной таблицы от потребностей в оборудовании. Как пользователи проверяют эти данные и что их значения могут измениться, и пользователи могут захотеть определить, что означают диапазоны значений результата Им могут потребоваться отдельные оповещения, например, экстренные, в зависимости от значений.

Пользователи уже используют настраиваемые решения для составления отчетов, такие как SAP AO, для ручного мониторинга данных самостоятельно, без ИТ. Вам не нужно удобство их с фотографиями. Это не тот ответ API, который вы просили, но я написал эссе на эту тему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...