2013-04-24 6 views
17

Sto esportando i dati da un elenco <> per eccellere. Voglio rendere grassetto alcune righe e celle specifiche. Ho bisogno di unire anche alcune celle.Come posso evidenziare in grassetto i caratteri di una specifica riga o cella in un foglio di lavoro Excel con C#?

Di seguito è riportato il codice che sto utilizzando.

try 
     { 
      Excel.Application application; 
      Excel.Workbook workBook; 
      Excel.Worksheet workSheet; 
      object misValue = System.Reflection.Missing.Value; 

      application = new Excel.ApplicationClass(); 
      workBook = application.Workbooks.Add(misValue); 
      workSheet = (Excel.Worksheet)workBook.Worksheets.get_Item(1); 

      int i = 1; 
      workSheet.Cells[i, 2] = "MSS Close Sheet";     
      i++; 
      workSheet.Cells[i, 2] = "MSS - " + dpsNoTextBox.Text; 
      i++; 
      workSheet.Cells[i, 2] = customerNameTextBox.Text; 
      i++;     
      workSheet.Cells[i, 2] = "Opening Date : "; 
      workSheet.Cells[i, 3] = openingDateTextBox.Value.ToShortDateString(); 
      i++; 
      workSheet.Cells[i, 2] = "Closing Date : "; 
      workSheet.Cells[i, 3] = closingDateTextBox.Value.ToShortDateString(); 
      i++; 
      i++; 
      i++; 

      workSheet.Cells[i, 1] = "SL. No"; 
      workSheet.Cells[i, 2] = "Month"; 
      workSheet.Cells[i, 3] = "Amount Deposited"; 
      workSheet.Cells[i, 4] = "Fine"; 
      workSheet.Cells[i, 5] = "Cumulative Total"; 
      workSheet.Cells[i, 6] = "Profit + Cumulative Total"; 
      workSheet.Cells[i, 7] = "Profit @ " + profitRateComboBox.Text; 
      i++; 



      ///////////////////////////////////////////////////////// 
      foreach (RecurringDeposit rd in RecurringDepositList) 
      { 
       workSheet.Cells[i, 1] = rd.SN.ToString(); 
       workSheet.Cells[i, 2] = rd.MonthYear; 
       workSheet.Cells[i, 3] = rd.InstallmentSize.ToString(); 
       workSheet.Cells[i, 4] = ""; 
       workSheet.Cells[i, 5] = rd.CumulativeTotal.ToString(); 
       workSheet.Cells[i, 6] = rd.ProfitCumulative.ToString(); 
       workSheet.Cells[i, 7] = rd.Profit.ToString(); 
       i++; 
      } 
      ////////////////////////////////////////////////////// 


      //////////////////////////////////////////////////////// 
      workSheet.Cells[i, 2] = "Total (" + RecurringDepositList.Count + " months installment)"; 
      workSheet.Cells[i, 3] = totalAmountDepositedTextBox.Value.ToString("0.00"); 
      i++; 

      workSheet.Cells[i, 2] = "a) Total Amount Deposited"; 
      workSheet.Cells[i, 3] = totalAmountDepositedTextBox.Value.ToString("0.00"); 
      i++; 

      workSheet.Cells[i, 2] = "b) Fine"; 
      workSheet.Cells[i, 3] = ""; 
      i++; 

      workSheet.Cells[i, 2] = "c) Total Pft Paid"; 
      workSheet.Cells[i, 3] = totalProfitPaidTextBox.Value.ToString("0.00"); 
      i++; 

      workSheet.Cells[i, 2] = "Sub Total"; 
      workSheet.Cells[i, 3] = (totalAmountDepositedTextBox.Value + totalProfitPaidTextBox.Value).ToString("0.00"); 
      i++; 

      workSheet.Cells[i, 2] = "Deduction"; 
      i++; 

      workSheet.Cells[i, 2] = "a) Excise Duty"; 
      workSheet.Cells[i, 3] = "0"; 
      i++; 

      workSheet.Cells[i, 2] = "b) Income Tax on Pft. @ " + incomeTaxPercentageTextBox.Text; 
      workSheet.Cells[i, 3] = "0"; 
      i++; 

      workSheet.Cells[i, 2] = "c) Account Closing Charge "; 
      workSheet.Cells[i, 3] = closingChargeCommaNumberTextBox.Value.ToString("0.00"); 
      i++; 

      workSheet.Cells[i, 2] = "d) Outstanding on BAIM(FO) "; 
      workSheet.Cells[i, 3] = baimFOLowerTextBox.Value.ToString("0.00"); 
      i++; 

      workSheet.Cells[i, 2] = "Total Deduction "; 
      workSheet.Cells[i, 3] = (incomeTaxDeductionTextBox.Value + closingChargeCommaNumberTextBox.Value + baimFOTextBox.Value).ToString("0.00"); 
      i++; 

      workSheet.Cells[i, 2] = "Client Paid "; 
      workSheet.Cells[i, 3] = customerPayableNumberTextBox.Value.ToString("0.00"); 
      i++; 

      workSheet.Cells[i, 2] = "e) Current Balance "; 
      workSheet.Cells[i, 3] = currentBalanceCommaNumberTextBox.Value.ToString("0.00"); 
      workSheet.Cells[i, 5] = "Exp. Pft paid on MSS A/C(PL67054)"; 
      workSheet.Cells[i, 6] = plTextBox.Value.ToString("0.00"); 
      i++; 

      workSheet.Cells[i, 2] = "e) Total Paid "; 
      workSheet.Cells[i, 3] = customerPayableNumberTextBox.Value.ToString("0.00"); 
      workSheet.Cells[i, 5] = "IT on Pft (BDT16216)"; 
      workSheet.Cells[i, 6] = incomeTaxDeductionTextBox.Value.ToString("0.00"); 
      i++; 

      workSheet.Cells[i, 2] = "Difference"; 
      workSheet.Cells[i, 3] = (currentBalanceCommaNumberTextBox.Value - customerPayableNumberTextBox.Value).ToString("0.00"); 
      workSheet.Cells[i, 5] = "Account Closing Charge"; 
      workSheet.Cells[i, 6] = closingChargeCommaNumberTextBox.Value; 
      i++; 

      /////////////////////////////////////////////////////////////// 

      workBook.SaveAs("D:\\" + dpsNoTextBox.Text.Trim() + "-" + customerNameTextBox.Text.Trim() + ".xls", Excel.XlFileFormat.xlWorkbookNormal, misValue, misValue, misValue, misValue, Excel.XlSaveAsAccessMode.xlExclusive, misValue, misValue, misValue, misValue, misValue); 
      workBook.Close(true, misValue, misValue); 
      application.Quit(); 

      releaseObject(workSheet); 
      releaseObject(workBook); 
      releaseObject(application); 

The sheet should look like this:

risposta

7

La tua domanda è un po 'poco chiaro ... come la parte che si indica che si desidera in grassetto in Excel è un DataGridView nell'importazione dal metodo di parola. Vuoi forse mettere in grassetto la prima riga nel documento Excel?

using xl = Microsoft.Office.Interop.Excel; 

xl.Range rng = (xl.Range)xlWorkSheet.Rows[0]; 
rng.Font.Bold = true; 

Semplice come quello!

HTH, Z

+1

Questo codice non viene nemmeno compilato. xlWorkSheet.Rows [0,0] è un array 2d. – anonymous

+0

È necessario restituire questo '(xl.Range) xlWorkSheet.Cells [0,0];' –

+0

Siamo spiacenti per il commento 3.5 anni dopo, ma questo codice funziona se cambio 'xl.Range rng = (xl.Range) 'to be' Range rng = (Range) ' – Sanya

51

Come Bold intera riga 10 esempio:

workSheet.Cells[10, 1].EntireRow.Font.Bold = true;  

Più formalmente:

Microsoft.Office.Interop.Excel.Range rng = workSheet.Cells[10, 1] as Xl.Range; 
rng.EntireRow.Font.Bold = true; 

Come Bold cellulare specifico 'A10', ad esempio:

workSheet.Cells[10, 1].Font.Bold = true; 

po 'più formale:

int row = 1; 
int column = 1; /// 1 = 'A' in Excel 

Microsoft.Office.Interop.Excel.Range rng = workSheet.Cells[row, column] as Xl.Range; 
rng.Font.Bold = true; 
4

Ho fatto questo in un progetto molto tempo fa. Il codice riportato di seguito scrive un'intera riga in grassetto con nomi di colonne specifici e tutte queste colonne sono scritte in grassetto.

private void WriteColumnHeaders(DataColumnCollection columnCollection, int row, int column) 
    { 
     // row represent particular row you want to bold its content. 
     for (i = 0; i < columnCollection.Count; i++) 
     { 
      DataColumn col = columnCollection[i]; 
      xlWorkSheet.Cells[row, column + i + 1] = col.Caption; 
      // Some Font Styles 
      xlWorkSheet.Cells[row, column + i + 1].Style.Font.Bold = true; 
      xlWorkSheet.Cells[row, column + i + 1].Interior.Color = Color.FromArgb(192, 192, 192); 
      //xlWorkSheet.Columns[i + 1].ColumnWidth = xlWorkSheet.Columns[i+1].ColumnWidth + 10; 
     } 
    } 

È necessario passare il valore della fila 0, in modo che prima riga dei fogli excel hanno intestazioni di colonna con la dimensione del carattere in grassetto. Basta cambiare DataColumnCollection al nome della colonna e modificare col.Caption in nome colonna specifico.

alternativo

Si può fare questo per cella del foglio Excel che si desidera in grassetto.

xlWorkSheet.Cells[row, column].Style.Font.Bold = true; 
-1

Di seguito si riporta il codice esatto avete bisogno per rendere il vostro look foglio esattamente come è nel PDF allegato:

try 
     { 
      Excel.Application application; 
      Excel.Workbook workBook; 
      Excel.Worksheet workSheet; 
      object misValue = System.Reflection.Missing.Value; 

      application = new Excel.ApplicationClass(); 
      workBook = application.Workbooks.Add(misValue); 
      workSheet = (Excel.Worksheet)workBook.Worksheets.get_Item(1); 

      int i = 1; 
      workSheet.Cells[i, 2] = "MSS Close Sheet"; 
      WorkSheet.Cells[i, 2].Style.Font.Bold = true;    
      i++; 
      workSheet.Cells[i, 2] = "MSS - " + dpsNoTextBox.Text; 
      WorkSheet.Cells[i, 2].Style.Font.Bold = true; 
      i++; 
      workSheet.Cells[i, 2] = customerNameTextBox.Text; 
      i++;     
      workSheet.Cells[i, 2] = "Opening Date : "; 
      workSheet.Cells[i, 3] = openingDateTextBox.Value.ToShortDateString(); 
      i++; 
      workSheet.Cells[i, 2] = "Closing Date : "; 
      workSheet.Cells[i, 3] = closingDateTextBox.Value.ToShortDateString(); 
      i++; 
      i++; 
      i++; 

      workSheet.Cells[i, 1] = "SL. No"; 
      workSheet.Cells[i, 2] = "Month"; 
      workSheet.Cells[i, 3] = "Amount Deposited"; 
      workSheet.Cells[i, 4] = "Fine"; 
      workSheet.Cells[i, 5] = "Cumulative Total"; 
      workSheet.Cells[i, 6] = "Profit + Cumulative Total"; 
      workSheet.Cells[i, 7] = "Profit @ " + profitRateComboBox.Text; 
      WorkSheet.Cells[i, 1].EntireRow.Font.Bold = true; 
      i++; 



      ///////////////////////////////////////////////////////// 
      foreach (RecurringDeposit rd in RecurringDepositList) 
      { 
       workSheet.Cells[i, 1] = rd.SN.ToString(); 
       workSheet.Cells[i, 2] = rd.MonthYear; 
       workSheet.Cells[i, 3] = rd.InstallmentSize.ToString(); 
       workSheet.Cells[i, 4] = ""; 
       workSheet.Cells[i, 5] = rd.CumulativeTotal.ToString(); 
       workSheet.Cells[i, 6] = rd.ProfitCumulative.ToString(); 
       workSheet.Cells[i, 7] = rd.Profit.ToString(); 
       i++; 
      } 
      ////////////////////////////////////////////////////// 


      //////////////////////////////////////////////////////// 
      workSheet.Cells[i, 2] = "Total (" + RecurringDepositList.Count + " months installment)"; 
      WorkSheet.Cells[i, 2].Style.Font.Bold = true; 
      workSheet.Cells[i, 3] = totalAmountDepositedTextBox.Value.ToString("0.00"); 
      i++; 

      workSheet.Cells[i, 2] = "a) Total Amount Deposited"; 
      workSheet.Cells[i, 3] = totalAmountDepositedTextBox.Value.ToString("0.00"); 
      i++; 

      workSheet.Cells[i, 2] = "b) Fine"; 
      workSheet.Cells[i, 3] = ""; 
      i++; 

      workSheet.Cells[i, 2] = "c) Total Pft Paid"; 
      workSheet.Cells[i, 3] = totalProfitPaidTextBox.Value.ToString("0.00"); 
      i++; 

      workSheet.Cells[i, 2] = "Sub Total"; 
      WorkSheet.Cells[i, 2].Style.Font.Bold = true; 
      workSheet.Cells[i, 3] = (totalAmountDepositedTextBox.Value + totalProfitPaidTextBox.Value).ToString("0.00"); 
      i++; 

      workSheet.Cells[i, 2] = "Deduction"; 
      WorkSheet.Cells[i, 2].Style.Font.Bold = true; 
      i++; 

      workSheet.Cells[i, 2] = "a) Excise Duty"; 
      workSheet.Cells[i, 3] = "0"; 
      i++; 

      workSheet.Cells[i, 2] = "b) Income Tax on Pft. @ " + incomeTaxPercentageTextBox.Text; 
      workSheet.Cells[i, 3] = "0"; 
      i++; 

      workSheet.Cells[i, 2] = "c) Account Closing Charge "; 
      workSheet.Cells[i, 3] = closingChargeCommaNumberTextBox.Value.ToString("0.00"); 
      i++; 

      workSheet.Cells[i, 2] = "d) Outstanding on BAIM(FO) "; 
      workSheet.Cells[i, 3] = baimFOLowerTextBox.Value.ToString("0.00"); 
      i++; 

      workSheet.Cells[i, 2] = "Total Deduction "; 
      WorkSheet.Cells[i, 2].Style.Font.Bold = true; 
      workSheet.Cells[i, 3] = (incomeTaxDeductionTextBox.Value + closingChargeCommaNumberTextBox.Value + baimFOTextBox.Value).ToString("0.00"); 
      i++; 

      workSheet.Cells[i, 2] = "Client Paid "; 
      WorkSheet.Cells[i, 2].Style.Font.Bold = true; 
      workSheet.Cells[i, 3] = customerPayableNumberTextBox.Value.ToString("0.00"); 
      i++; 

      workSheet.Cells[i, 2] = "e) Current Balance "; 
      workSheet.Cells[i, 3] = currentBalanceCommaNumberTextBox.Value.ToString("0.00"); 
      workSheet.Cells[i, 5] = "Exp. Pft paid on MSS A/C(PL67054)"; 
      workSheet.Cells[i, 6] = plTextBox.Value.ToString("0.00"); 
      i++; 

      workSheet.Cells[i, 2] = "e) Total Paid "; 
      workSheet.Cells[i, 3] = customerPayableNumberTextBox.Value.ToString("0.00"); 
      workSheet.Cells[i, 5] = "IT on Pft (BDT16216)"; 
      workSheet.Cells[i, 6] = incomeTaxDeductionTextBox.Value.ToString("0.00"); 
      i++; 

      workSheet.Cells[i, 2] = "Difference"; 
      WorkSheet.Cells[i, 2].Style.Font.Bold = true; 
      workSheet.Cells[i, 3] = (currentBalanceCommaNumberTextBox.Value - customerPayableNumberTextBox.Value).ToString("0.00"); 
      workSheet.Cells[i, 5] = "Account Closing Charge"; 
      workSheet.Cells[i, 6] = closingChargeCommaNumberTextBox.Value; 
      i++; 

      /////////////////////////////////////////////////////////////// 

      workBook.SaveAs("D:\\" + dpsNoTextBox.Text.Trim() + "-" + customerNameTextBox.Text.Trim() + ".xls", Excel.XlFileFormat.xlWorkbookNormal, misValue, misValue, misValue, misValue, Excel.XlSaveAsAccessMode.xlExclusive, misValue, misValue, misValue, misValue, misValue); 
      workBook.Close(true, misValue, misValue); 
      application.Quit(); 

      releaseObject(workSheet); 
      releaseObject(workBook); 
      releaseObject(application); 
+0

Questo codice non viene compilato. – anonymous

+0

Considerando che ho usato il registratore di macro per rendere il foglio simile al PDF allegato che hai fornito, trovo che sia interessante. Immagino che Excel non possa scrivere codice che compila correttamente? –

1

questo funziona per me, in modo da provare:

Microsoft.Office.Interop.Excel.Range rng =(Microsoft.Office.Interop.Excel.Range)XcelApp.Cells[1, i]; 
rng.Font.Bold = true; 
rng.Interior.Color =System.Drawing.ColorTranslator.ToOle(System.Drawing.Color.Yellow); 
rng.BorderAround(); 
+0

Funziona, ma puoi dire un altro modo di dare l'intera riga o le proprietà di una colonna come questa @ MORFEE89 –