Ich importiere Daten in Excel-Tabellen aus einer Datenbank. Dazu benutze ich den Datenreader. Die Excel-Sheet-Vorlage hat einige Makros und wenige Formeln berechnet und es ist nicht das normale Excel-Arbeitsblatt. also muss ich die Daten nur in das Excel-Blatt schreiben, wenn die bestimmte Zelle schreiben darf. Wenn nicht, sollten die Daten nicht importiert werden.Wie überprüfen Sie, ob eine Zelle in EXCEL mit C# gelesen wird
Also dafür habe ich eine XML-Datei, die besagt, aus welcher Spalte ich anfangen soll zu schreiben und in welcher Zeile es aufhören soll, das habe ich für viele Blätter getan. Aber in einem Blatt ist die erste Zelle der Zeile "readonly" (gesperrt) und der Rest ist Schreibzugriff erlaubt.
Da ich die gesamte Zeile von DB mit Datareader bekomme, bin ich mit dem Schreiben in die anderen Zellen stecken, ohne in die gesperrte Zelle zu schreiben.
Ich füge das Code-Snippet als Referenz an.
Bitte helfen Sie mir dabei.
Probe ::
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);
Bitte helfen Sie mir dies bei der Lösung.
Danke,
Ramm
Sie einige Code geschrieben haben, aber du hast nicht erklärt, was es tut oder warum es nicht für dich funktioniert? –
Sorry, ich habe es vergessen. Dieser Codeabschnitt liest die Daten aus der Datenbank, wenn der Reader Zeilen enthält. Anschließend wird eine neue vorinstallierte Excel-Vorlagendatei geöffnet und die Leserdaten dem Values-Objekt zugewiesen. Dann für die Header-Länge (HeaderData.Length) in XML-Datei schreibt es in die einzelnen Excel-Zelle und schließlich speichert es die Datei und schließt. Die Position, an der die Daten geschrieben werden, ist excelworksheet.Cells [CurTaskNode.DATA_MIN_ROW + minRow, CurTaskNode.DATA_MIN_COL + minCol] = Werte [iValueIndex]; // Eigentlich muss eine Überprüfung durchgeführt werden, ob in die Zelle geschrieben werden soll. Ich kann das nicht machen. Pls Hilfe – Ramm
Ok, ich habe eine neue Antwort geschrieben, probieren Sie es aus. –