3

DataReader を使用して、データを Excel シートのセルに書き込みます。セルが書き込み権限を持つまでは問題ありません。ただし、あるケースでは、1 つのセルのみが読み取り専用で、残りのセルは書き込み可能です。

例: 10 * 10 セル、最初のセルのみが読み取り専用です。したがって、このセルを残して残りのセルに書き込む必要があります。しかし、データリーダーを使用すると、行全体を一度に書き込むことができます..では、C#を使用してこれを達成するにはどうすればよいですか?

Team Leader (required) , , , , , , , , , 
, , , , , , , , , ,
, , , , , , , , , ,
, , , , , , , , , ,
, , , , , , , , , ,

したがって、最初のセルは datareader によって書き込まれるべきではありません。これを行うのを手伝ってください

if (reader.HasRows)
{
    minRow = 0;
    minCol = 0;
    // Process each result in the result set
    while (reader.Read())
    {
        // Create an array big enough to hold the column values
        object[] values = new object[reader.FieldCount];
        // Add the array to the ArrayList
        rowList.Add(values);
        // Get the column values into the array
        reader.GetValues(values);
        int iValueIndex = 0;

        // If the Reading Format is by ColumnByColumn 
        if (CurTaskNode.ReadFormat == "ColumnbyColumn")
        {
            minCol = 0;
            //   minRow = 0;
            for (int iCol = 0; iCol < CurTaskNode.HeaderData.Length; iCol++)
            {
                // Checking whether the Header data exists or not
                if (CurTaskNode.HeaderData[minCol] != "")
                {
                    // Assigning the Value from reader to the particular cell in excel sheet                   
                    excelworksheet.Cells[CurTaskNode.DATA_MIN_ROW + minRow, CurTaskNode.DATA_MIN_COL + minCol] = values[iValueIndex];
                    iValueIndex++;
                }
                minCol++;
            }
            minRow++;
        }
    }
}

ありがとう、ラムちゃん

4

2 に答える 2

1

グーグルでこれを見つけたので、おそらくそれは機能する/おそらく機能しない: ここでは、コードはあなたのものと同じに見えます

範囲のAllowEditプロパティを使用して、次のことができます。

// Assigning the Value from reader to the particular cell in excel sheet      
Excel.Range c = (Excel.Range)excelworksheet.Cells[CurTaskNode.DATA_MIN_ROW + minRow, CurTaskNode.DATA_MIN_COL + minCol];
if (c.AllowEdit) c.Value2 = values[iValueIndex];

それ以外の

// Assigning the Value from reader to the particular cell in excel sheet                   
excelworksheet.Cells[CurTaskNode.DATA_MIN_ROW + minRow, CurTaskNode.DATA_MIN_COL + minCol] = values[iValueIndex];
于 2010-06-04T12:10:32.033 に答える
0

C# を使用して特定の Excel セルへの書き込みをスキップする方法を見つけるために多くのことを試みましたが、適切なロジックを取得できませんでした。

私の例: チームリーダー (必須) abcxyz User1 user2 Customer Interface Focal dfgidf user23 user3

上記の名前はそれぞれ特定のセルにある必要があります...しかし、Excelテンプレートでは、最初のセル(チームリーダー(必須))は読み取り専用であるため、そのセルに書き込むことができないため、最終的なExcelシートが表示されるはずです

                            abcxyz  User1   user2
Customer Interface Focal    dfgidf  user23  user3.....
.....

私はこれのためにさまざまなロジックを試しました...以下のコードを参照してください

Microsoft.Office.Interop.Excel.Workbook SelWorkBook = excelappln1.Workbooks.Open(
    curfile,
    0, false, 5, "", "", false,
    Microsoft.Office.Interop.Excel.XlPlatform.xlWindows,
    "", true,
    false, 0, false, false, false);

Microsoft.Office.Interop.Excel.Sheets excelSheets = SelWorkBook.Worksheets;
Microsoft.Office.Interop.Excel.Worksheet excelworksheet =(Microsoft.Office.Interop.Excel.Worksheet)excelSheets.get_Item(CurSheetName);

Microsoft.Office.Interop.Excel.Range excelRange = excelworksheet.UsedRange;

if ((!excelworksheet.Cells[CurTaskNode.DATA_MIN_ROW + minRow, CurTaskNode.DATA_MIN_COL + minCol]).Locked)
{
    // Assigning the Value from reader to the particular cell in excel sheet 
    excelworksheet.Cells[CurTaskNode.DATA_MIN_ROW + minRow, CurTaskNode.DATA_MIN_COL +      minCol] = values[iValueIndex];
    iValueIndex++;
}

しかし、エラーは if ステートメントに表示されます エラー 1 演算子 '!' タイプ「オブジェクト」のオペランドには適用できません

では、この場合の対処法を教えてください。

ありがとうラム

于 2009-07-06T06:18:14.563 に答える