web-dev-qa-db-ja.com

範囲のセルスタイルの配置

Excelシートのセルのフォーマットに問題があります。何らかの理由で、いくつかの指定された範囲または指定された範囲のスタイルを変更したいだけのとき、私のコードはすべてのセルのスタイルを変更しているようです。

私が使用しているコードの一部を次に示します。

app = new Microsoft.Office.Interop.Excel.Application();
workbook = app.Workbooks.Add(1);
worksheet = (Microsoft.Office.Interop.Excel.Worksheet)workbook.Sheets[1];

//Change all cells' alignment to center
worksheet.Cells.Style.HorizontalAlignment = Microsoft.Office.Interop.Excel.XlHAlign.xlHAlignCenter;

//But then this line changes every cell style back to left alignment
worksheet.Cells[y + 1, x + 2].Style.HorizontalAlignment = Microsoft.Office.Interop.Excel.XlHAlign.xlHAlignLeft;

1つのセルだけで動作するように設定すると、複数のセルのスタイルが変更されるのはなぜですか?それは私が望むように動作するはずではありませんか?これを行う別の方法はありますか?

26
kschieck

OPからのこのコメント、「問題が見つかりました。明らかにworksheet.Cells [y + 1、x + 1] .Horizo​​ntalAlignment」に基づいて、本当の説明は、すべてのセルが同じStyleオブジェクトを共有し始めるということです。そのため、そのスタイルオブジェクトを変更すると、それを使用するすべてのセルが変更されます。ただし、セルの配置プロパティを直接変更した場合、そのセルのみが影響を受けます。

23
DGH

これはうまくいく

worksheet.get_Range("A1","A14").Cells.HorizontalAlignment = 
                 Microsoft.Office.Interop.Excel.XlHAlign.xlHAlignLeft;
23
Manikandan

たぶん、範囲を宣言することはあなたにとってよりうまくいくかもしれません。

// fill in the starting and ending range programmatically this is just an example. 
string startRange = "A1";
string endRange = "A1";
Excel.Range currentRange = (Excel.Range)excelWorksheet.get_Range(startRange , endRange );
currentRange.Style.HorizontalAlignment = Microsoft.Office.Interop.Excel.XlHAlign.xlHAlignLeft;
6
crackhaus

範囲内またはセル内でスタイルを直接変更しても機能しませんでした。しかし、アイデアは:

  1. 別のスタイルを作成する
  2. 必要なすべてのスタイルプロパティ値を適用する
  3. スタイルの名前を範囲のStyleプロパティに設定します

MSDN How to:Programmatically Apply Styles to Ranges in Workbooks で与えられました。

例えば:

var range = worksheet.Range[string.Format("A{0}:C{0}", rowIndex++)];
range.Merge();
range.Value = "some value";

var style = workbook.AddStyle();
style.HorizontalAlignment = Microsoft.Office.Interop.Excel.XlHAlign.xlHAlignLeft;

range.Style = style.Name;
1
horgh
  ExcelApp.Sheets[1].Range[ExcelApp.Sheets[1].Cells[1, 1], ExcelApp.Sheets[1].Cells[70, 15]].Cells.HorizontalAlignment =
                 Microsoft.Office.Interop.Excel.XlHAlign.xlHAlignCenter;

これは私には問題ありません。

「スタイル:

worksheet.Cells[y,x].HorizontalAlignment = Microsoft.Office.Interop.Excel.XlHAlign.xlHAlignLeft;
0
Sheep_Sleep

私のために働く何か。楽しい。

Excel.Application excelApplication =  new Excel.Application()  // start Excel and turn off msg boxes
{
     DisplayAlerts = false,
     Visible = false
};

Excel.Workbook workBook = excelApplication.Workbooks.Open(targetFile);
Excel.Worksheet workSheet = (Excel.Worksheet)workBook.Worksheets[1];

var rDT = workSheet.Range(workSheet.Cells[monthYearNameRow, monthYearNameCol], workSheet.Cells[monthYearNameRow, maxTableColumnIndex]);
rDT.Merge();
rDT.Value = monthName + " " + year;
var reportDateRowStyle = workBook.Styles.Add("ReportDateRowStyle");
reportDateRowStyle.HorizontalAlignment = XlHAlign.xlHAlignCenter;
reportDateRowStyle.Font.Color = System.Drawing.ColorTranslator.ToOle(System.Drawing.Color.Black);
reportDateRowStyle.Font.Bold = true;
reportDateRowStyle.Font.Size = 14;
rDT.Style = reportDateRowStyle;
0
Developer

SpreadSheetGearの場合はworkbook.Worksheets[0].Cells["B1:B4"].HorizontalAlignment = HAlign.Center;。これにより、シートのすべてのセルがB1からB4(列2行1行4)に揃えられます。これが、セルをフォーマットしようとして問題に遭遇したすべてのSpreadSheetGearユーザーに役立つことを願っています

0
Ionut Radu