I am using DataReader to write data into excelsheet cells. I have no problem until the cell has write previleges. But in one case, only one cell is readonly and the rest cells are writable.
我正在使用DataReader将数据写入excelsheet单元格。在单元格写入优先权之前我没有问题。但在一种情况下,只有一个单元是只读的,其余单元是可写的。
Eg : 10 * 10 cells, only first cell is readonly. so, i shuld leave this cell and write it to rest of the cells. But with the data reader it writes entire row at one go.. so how can i acheive this using C# ?
例如:10 * 10个细胞,只有第一个细胞是只读的。所以,我shuld离开这个细胞并将其写入其余的细胞。但是使用数据读取器,它可以一次性写入整行......那么我如何使用C#实现这一目标呢?
Team Leader (required) , , , , , , , , ,
, , , , , , , , , ,
, , , , , , , , , ,
, , , , , , , , , ,
, , , , , , , , , ,
so, the first cell shouldn't be written by datareader. Please help me in doing this
所以,第一个单元格不应该由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++;
}
}
}
Thank you, Ramm
谢谢你,拉姆
2 个解决方案
#1
1
Found this on google so maybe it works/maybe it doesn't: here, code looks the same as yours
在谷歌上找到这个可能它的工作/也许它没有:在这里,代码看起来与你的相同
You can use the AllowEdit property of a range so you could do:
您可以使用范围的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];
instead of
// 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];
#2
0
I tried a lot to figure out how to skip writin onto a particular excel cell using C#, but couldnt get the proper logic.
我试了很多想弄清楚如何使用C#跳过写入特定excel单元格,但无法获得正确的逻辑。
my eg: Team Leader (required) abcxyz User1 user2 Customer Interface Focal dfgidf user23 user3
我的eg:团队负责人(必填)abcxyz User1 user2客户界面焦点dfgidf user23 user3
each of the names above has to be in a particular cell... but in the excel template, first cell (Team Leader (required)) is readonly, so i cant write into that cell, so my final excel sheet should show
上面的每个名称都必须在特定的单元格中...但在excel模板中,第一个单元格(团队负责人(必填))是只读的,所以我不能写入该单元格,所以我的最终excel表格应该显示
abcxyz User1 user2
Customer Interface Focal dfgidf user23 user3.....
.....
i tried various logics for this... please see the code below
我为此尝试了各种逻辑...请参阅下面的代码
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++;
}
but the error shows, in the if statement Error 1 Operator '!' cannot be applied to operand of type 'object'
但错误显示,在if语句错误1运算符'!'不能应用于'对象'类型的操作数
so, please say how to handle this case.
所以,请说明如何处理这个案子。
Thanks Ramm
#1
1
Found this on google so maybe it works/maybe it doesn't: here, code looks the same as yours
在谷歌上找到这个可能它的工作/也许它没有:在这里,代码看起来与你的相同
You can use the AllowEdit property of a range so you could do:
您可以使用范围的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];
instead of
// 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];
#2
0
I tried a lot to figure out how to skip writin onto a particular excel cell using C#, but couldnt get the proper logic.
我试了很多想弄清楚如何使用C#跳过写入特定excel单元格,但无法获得正确的逻辑。
my eg: Team Leader (required) abcxyz User1 user2 Customer Interface Focal dfgidf user23 user3
我的eg:团队负责人(必填)abcxyz User1 user2客户界面焦点dfgidf user23 user3
each of the names above has to be in a particular cell... but in the excel template, first cell (Team Leader (required)) is readonly, so i cant write into that cell, so my final excel sheet should show
上面的每个名称都必须在特定的单元格中...但在excel模板中,第一个单元格(团队负责人(必填))是只读的,所以我不能写入该单元格,所以我的最终excel表格应该显示
abcxyz User1 user2
Customer Interface Focal dfgidf user23 user3.....
.....
i tried various logics for this... please see the code below
我为此尝试了各种逻辑...请参阅下面的代码
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++;
}
but the error shows, in the if statement Error 1 Operator '!' cannot be applied to operand of type 'object'
但错误显示,在if语句错误1运算符'!'不能应用于'对象'类型的操作数
so, please say how to handle this case.
所以,请说明如何处理这个案子。
Thanks Ramm