2009-08-03 110 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++; 
} 
相关问题