34

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

4

8 に答える 8

32

これはうまくいきます

worksheet.get_Range("A1","A14").Cells.HorizontalAlignment = 
                 Microsoft.Office.Interop.Excel.XlHAlign.xlHAlignLeft;
于 2013-07-31T11:29:31.947 に答える
30

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

于 2012-07-17T23:43:30.850 に答える
8

範囲を宣言すると、うまくいくかもしれません。

// 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;
于 2012-07-17T20:06:02.093 に答える
1
  ExcelApp.Sheets[1].Range[ExcelApp.Sheets[1].Cells[1, 1], ExcelApp.Sheets[1].Cells[70, 15]].Cells.HorizontalAlignment =
                 Microsoft.Office.Interop.Excel.XlHAlign.xlHAlignCenter;

これは私にとってはうまくいきます。

于 2016-02-25T20:23:14.667 に答える
1

範囲またはセルでスタイルを直接変更してもうまくいきませんでした。しかし、アイデアは次のとおりです。

  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;
于 2014-09-16T07:25:50.887 に答える