Как вы проверяете, доступна ли ячейка только для чтения в EXCEL, используя C # - PullRequest
1 голос
/ 03 августа 2009

Я импортирую данные в таблицы Excel из базы данных. Для этого я использую datareader. Шаблон листа Excel содержит несколько макросов и несколько вычисленных формул, и это не обычный лист Excel. поэтому я должен записывать данные в таблицу 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);

Пожалуйста, помогите мне решить эту проблему.

Спасибо,

Рамм

1 Ответ

0 голосов
/ 03 августа 2009

Хорошо, сначала вам нужно проверить свойство locked первой ячейки, затем, если он заблокирован, нарезать массив (чтобы у вас была вся строка за вычетом первого столбца), затем записать на лист. Вот некоторый код, не обязательно точный, функция SLICE - это просто псевдокод, есть несколько различных способов нарезки массивов в 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++;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...