2009-08-03 60 views
1

我正在將數據從數據庫導入Excel工作表。爲此,我正在使用datareader。 Excel工作表模板有一些宏和幾個公式計算,它不是正常的Excel工作表。所以只有在允許特定單元格寫入的情況下,我才能將數據寫入Excel表格。如果不是,則不應導入數據。如何使用C#檢查單元格是否在EXCEL中只讀?

所以,爲此,我有一個XML文件,說哪一列我應該開始寫,並在哪一行它應該停止,我已經做了很多工作表。但在一張表中,該行的第一個單元格是「只讀」(鎖定),其餘的是允許寫入訪問。

由於我使用Datareader從數據庫中獲取整行,因此無法寫入鎖定的單元格,我無法寫入其他單元格。

我附上代碼片段以供參考。

請幫我做這件事。

樣品::

if (reader.HasRows) 
    { 
    minRow = 0; 
    minCol = 0; 
    Excel.Workbook SelWorkBook = excelAppln.Workbooks.Open(curfile, 0, false, 5, "", "", false, Excel.XlPlatform.xlWindows, "", true, false, 0, false, false, false); 
    Excel.Sheets excelSheets = SelWorkBook.Worksheets; 

Excel.Worksheet excelworksheet = (Excel.Worksheet)excelSheets.get_Item(CurSheetName); 

             // 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++; 
              }SelWorkBook.Close(true, curfile, null); 

請幫我解決這個。

謝謝你,

拉姆

+0

您已經發布了一些代碼,但是你沒有解釋它做了什麼或者爲什麼它不適合你? – 2009-08-03 12:53:57

+0

對不起,我忘了。 這段代碼從數據庫讀取數據,如果讀者有行。然後打開一個新的預先加載的excel模板文件,並將讀者數據分配給Values對象。然後,將XML文件中的頭部長度(HeaderData.Length)寫入每個excel單元,最後保存文件並關閉。 數據寫入的位置是excelworksheet.Cells [CurTaskNode.DATA_MIN_ROW + minRow,CurTaskNode.DATA_MIN_COL + minCol] = values [iValueIndex]; //實際上是否需要執行檢查b4是否寫入單元格。我無法做到。請幫助 – Ramm 2009-08-03 14:04:25

回答

0

好吧,首先,你需要檢查的第一個單元格的鎖定屬性,那麼如果它的鎖定片陣列(讓你有整行減去第一列),然後寫入表單。下面是一些代碼,不一定精確,切片功能僅僅是僞代碼,也有一些在C#中數組切片不同的方式,使用您選擇的方法:

if (!excelworksheet.Cells[CurTaskNode.DATA_MIN_ROW + minRow, CurTaskNode.DATA_MIN_COL + 1].Locked) 
{ 
    excelworksheet.Cells[CurTaskNode.DATA_MIN_ROW + minRow, CurTaskNode.DATA_MIN_COL + minCol] = values[iValueIndex]; 
    iValueIndex++; 
} 
else 
{ 
    excelworksheet.Cells[CurTaskNode.DATA_MIN_ROW + minRow, CurTaskNode.DATA_MIN_COL + minCol] = values.SLICE(iValueIndex); 
    iValueIndex++; 
} 
相關問題