2014-09-25 4 views
0

Я создал файл excel и изменил цвета и ширину некоторых ячеек. Я открываю этот существующий файл excel для редактирования с помощью C#. Если я запускаю программу, она записывает значения в ячейки, но также сбрасывает формат ячеек. Как я могу избежать этого? Как я могу добавить значения в ячейки без изменения их форматов т.е. цвета, ширины и т.д.Как редактировать ячейки excel без изменения формата ячеек в C#

void DumpRegistersToFile(bool openFileInNotepad, uint[] registers, params uint[] registerStartEnds) 
    { 
     string excelFileName = "RegisterDump.xlsx"; 
     Excel.Application xlApp; 
     Excel.Workbook xlWorkBook; 
     Excel.Worksheet xlWorkSheet; 

     int[] RegOffsetValues = (int[])Enum.GetValues(typeof(enumRegOffset)); 
     int columnOffset = 3; 

     object misValue = System.Reflection.Missing.Value; 

     xlApp = new Excel.Application(); 

     xlWorkBook = xlApp.Workbooks.Open(excelFileName, 
               0,  // Updatelinks 
               false, // Readonly 
               5,  // Format 
               "", 
               "", 
               true, // IgnoreReadOnlyRecommended 
               Microsoft.Office.Interop.Excel.XlPlatform.xlWindows, 
               0,  // Delimiter 
               true, // Editable 
               true, // Notify 
               0,  // Converter 
               true, // Add workbook to recently used files 
               true, // Local 
               0);  // CorruptLoad 

     xlWorkSheet = (Excel.Worksheet)xlWorkBook.Worksheets.get_Item(1); 

     uint regIdx = 0; 
     int colIndex = 0; 

     for (int i = 0; i < registerStartEnds.Count(); i += 2) 
     { 
       uint startAddress = registerStartEnds[i]; 
       uint endAddress = registerStartEnds[i + 1]; 

       uint readLength = endAddress - startAddress; 

       for (int j = 0; j < readLength; j++) 
       { 
        xlWorkSheet.Cells[RegOffsetValues[regIdx], columnOffset-1] = registers[regIdx]; 

        for (colIndex = 0; colIndex < 16; colIndex++) 
        { 
         xlWorkSheet.Cells[RegOffsetValues[regIdx], columnOffset + (16-colIndex)].Value = ((registers[regIdx] >> colIndex) & 1);      
        } 

        regIdx++; 
       }    
      } 


      xlApp.DisplayAlerts = true; 

      xlWorkBook.SaveAs(excelFileName, 
          Excel.XlFileFormat.xlOpenXMLWorkbook, 
          misValue, 
          misValue, 
          false, 
          false, 
          Excel.XlSaveAsAccessMode.xlNoChange, 
          misValue, 
          misValue, 
          misValue, 
          misValue, 
          misValue); 



      xlWorkBook.Close(true, misValue, misValue); 

      xlApp.DisplayAlerts = true; 
      xlApp.Quit(); 



      releaseObject(xlWorkSheet); 
      releaseObject(xlWorkBook); 
      releaseObject(xlApp); 

      xlWorkSheet = null; 
      xlWorkBook = null; 
      xlApp = null; 

      GC.Collect(); 
      GC.WaitForPendingFinalizers(); 

      Process.Start("Excel.exe", excelFileName); 

    } 

    private void releaseObject(object obj) 
    { 
     try 
     { 
      System.Runtime.InteropServices.Marshal.FinalReleaseComObject(obj); 
      obj = null; 
     } 
     catch (Exception ex) 
     { 
      obj = null; 
      MessageBox.Show("Exception Occured while releasing object " + ex.ToString()); 
     } 
     finally 
     { 
      GC.Collect(); 
     } 
    } 

ответ

0

Я считаю, что изменить его здесь:

xlWorkSheet.Cells[RegOffsetValues[regIdx], columnOffset + (16-colIndex)].Value = ((registers[regIdx] >> colIndex) & 1); 

Вам не нужно .Value:

xlWorkSheet.Cells[RegOffsetValues[regIdx], columnOffset + (16-colIndex)] = ((registers[regIdx] >> colIndex) & 1); 

Проверить this link :)

+0

Спасибо за ответ, но я попробовал это уже (с или без.). И в статье, которую вы отправили, она создает новый файл excel и изменяет формат. Это отличается. Я хочу изменить существующий и ранее отформатированный файл excel. –

+0

Хммм ... не важно, думаю, какую версию вы используете? (офис и перевод) – Buzka91

+0

Ооо, извините, я забыл упомянуть об этом. Visual Studio Express 2013 V12, .NET 4.5, Microsoft Excel 15.0 Object Library, Microsoft Office 2013. –

0

Я нашел свою ошибку :) Я не должен сохранять как ... файл, я должен сохранить его как есть.

   xlWorkBook.Save(); 

Вместо

xlWorkBook.SaveAs(....); 

Спасибо за помощь.

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