2015-06-25 3 views
1

Я несу файл Excel с двумя рабочими листами, первыми данными для подачи и второй рабочей таблицей, содержащей сводную таблицу. Вставьте данные в первый рабочий лист и попытайтесь сохранить исключение.Ошибка при сохранении excelPackage

Исключение: InneException {echo "cachesource не рабочий лист"} сообщение "Ошибка при сохранении файла C: \ Users \ диссертаций \ Desktop \ Modelo.xlsx"

using (FolderBrowserDialog folderBrowserDialog = new FolderBrowserDialog()) 
     { 
      if (folderBrowserDialog.ShowDialog() == DialogResult.OK) 
      { 
       FileInfo fileInfo = new FileInfo(@"C:\Users\idias\Desktop\teste\Modelo.xlsx"); 
       if (!fileInfo.Exists) 
        throw new Exception("Arquivo Modelo não encontrado"); 

       string filename = string.Format("{0}\\{1}", folderBrowserDialog.SelectedPath, fileInfo.Name); 

       fileInfo.CopyTo(filename, true); 

       fileInfo = new FileInfo(filename); 

       using (ExcelPackage excelPackage = new ExcelPackage(fileInfo)) 
       { 
        ExcelWorkbook excelWorkBook = excelPackage.Workbook; 

        DataTable dtPlanoConta = Negocio.Financeiro.Relatorio.RecuperarPlanoConta(); 
        if (dtPlanoConta.Rows.Count > 0) 
        { 
         ExcelWorksheet excelWorksheet = excelWorkBook.Worksheets[1]; 
         //Add some items in the cells... 
         int row = 3; 
         foreach (DataRow dr in dtPlanoConta.Rows) 
         { 
          row++; 

          //Campos           
          excelWorksheet.SetValue(row, 1, dr["ID"]); 
          excelWorksheet.SetValue(row, 2, dr["FATHER_ID"]); 
          excelWorksheet.SetValue(row, 3, dr["DESCRICAO_FORMATADA"]); 
         } 

         row = 1; 
         for (int i = 0; i < dtPlanoConta.Rows.Count; i++) 
         { 
          row++; 

          //Campos 
          excelWorksheet.Cells[row, 1].Style.Numberformat.Format = "@"; 
          excelWorksheet.Cells[row, 2].Style.Numberformat.Format = "@"; 
          excelWorksheet.Cells[row, 3].Style.Numberformat.Format = "@"; 
         } 

         excelWorksheet.Cells[excelWorksheet.Dimension.Address].AutoFitColumns(); 
        } 

        DataTable dtDemonstrativo = Negocio.Financeiro.Relatorio.RecuperarDemonstrativo(1, 3, "2015"); 
        if (dtDemonstrativo.Rows.Count > 0) 
        { 
         ExcelWorksheet excelWorksheet = excelWorkBook.Worksheets[2]; 

         //Add some items in the cells... 
         int row = 1; 
         foreach (DataRow dr in dtDemonstrativo.Rows) 
         { 
          row++; 

          //Campos           
          excelWorksheet.Cells[row, 1].Value = dr["ID"]; 
          excelWorksheet.Cells[row, 2].Value = dr["OPERACAO"]; 
          excelWorksheet.Cells[row, 3].Value = dr["MES_ANO"]; 
          excelWorksheet.Cells[row, 4].Value = dr["VALOR_PLANEJADO"]; 
          excelWorksheet.Cells[row, 5].Value = dr["VALOR_REALIZADO"]; 
          excelWorksheet.Cells[row, 6].Value = dr["DIFERENCA_REAIS"]; 
          excelWorksheet.Cells[row, 7].Value = dr["DIFERENCA_PERCENTUAL"]; 
         } 

         row = 1; 
         for (int i = 0; i < dtDemonstrativo.Rows.Count; i++) 
         { 
          row++; 

          //Campos 
          excelWorksheet.Cells[row, 1].Style.Numberformat.Format = "@"; 
          excelWorksheet.Cells[row, 2].Style.Numberformat.Format = "@"; 
          excelWorksheet.Cells[row, 3].Style.Numberformat.Format = "DD/yyyy"; 
          excelWorksheet.Cells[row, 3].Style.Numberformat.Format = "#,##0.000"; 
          excelWorksheet.Cells[row, 4].Style.Numberformat.Format = "#,##0.000"; 
          excelWorksheet.Cells[row, 5].Style.Numberformat.Format = "#,##0.000"; 
          excelWorksheet.Cells[row, 6].Style.Numberformat.Format = "#,##0.000"; 
         } 

         excelWorksheet.Cells[excelWorksheet.Dimension.Address].AutoFitColumns(); 
        } 

        excelPackage.Save(); // This is the important part. 
       } 
      } 
     } 

ответ

0

Вы должны добавить ExcelWorksheet к ExcelWorkbook перед записью в ячейки. Посмотрите на their samples

+0

Привет, Руи, спасибо за ответ. Я сделал то, что вы предлагали, но все равно делал ту же ошибку. Я использую готовый сайт электронных таблиц (http://www.daxpatterns.com/parent-child-hierarchies/) –

0

ли поиск Google для сообщения об ошибке, и увидел некоторые из исходного кода для ExcelPackage (вы можете увидеть его here), где исключение. Похоже, что если вы измените исходные данные для сводной таблицы, вам может понадобиться обновить/воссоздать источник кеша. Проверьте сводную таблицу внутри объекта ExcelWorkSheet - попробуйте отладить ее значения до сохранения файла

Смежные вопросы