Как удалить #NA из Excel Range в C # - PullRequest
0 голосов
/ 02 ноября 2019

Я уже давно пытаюсь это выяснить. Но такие решения, как this и this не решают мою проблему.

Я добавляю данные из базы данных в Excel со следующим кодом: -

//Adding Table values in Excel
            int sum = 0;
            object[,] arr = new object[result.Rows.Count, result.Columns.Count];
            for (int r = 0; r < result.Rows.Count; r++)
            {
                DataRow dr = result.Rows[r];
                for (int c = 0; c < result.Columns.Count; c++)
                {
                    arr[r, c] = dr[c];
                }
                    sum = sum + Convert.ToInt32(dr[5]);
            }


            Microsoft.Office.Interop.Excel.Range c3 = (Microsoft.Office.Interop.Excel.Range)ws.Cells[20, 1];
            Microsoft.Office.Interop.Excel.Range c4 = (Microsoft.Office.Interop.Excel.Range)ws.Cells[result.Rows.Count + 20, result.Columns.Count];

            Microsoft.Office.Interop.Excel.Range range1 = ws.get_Range(c3, c4);
            range1.Value = arr;

Теперь в строке range1.Value = arr; добавляется еще одна строка со значением всех столбцов как # N / A, когда я отлаживаю код, показанное здесь значение -2146826246.

Во-первых, я непонять, почему в конце добавляется собственный ряд? Во-вторых, почему значения приходят как # N / A и как это решить?

1 Ответ

0 голосов
/ 02 ноября 2019

Ошибка # N / A в Excel (# N / V на немецком языке) появляется, когда диапазон больше, чем массив. Таким образом, если myRange равно [5,5] и myArray равно [4,4],

myRange.Value = myArray вернет это:

enter image description here

Как этого избежать - не назначайте маленький массив большему диапазону. Или прокрутите диапазон и проверьте наличие знака # . Тогда сделай что-нибудь с этим. Это код, с которым нужно «играть», видя, как он присваивает значения из массива диапазону:

using System;
using Excel = Microsoft.Office.Interop.Excel;

namespace excelTest
{
    class Program
    {
        static void Main()
        {
            Excel.Application excel = new Excel.Application
            {
                Visible = true,
                DisplayAlerts = false
            };

            Excel.Workbook wbk = excel.Workbooks.Add(Type.Missing);
            Excel.Worksheet wks = wbk.Worksheets[1];

            Excel.Range cellA1 = wks.Cells[1, 1];
            Excel.Range cellE5 = wks.Cells[5, 5];
            Excel.Range myRange = wks.get_Range(cellA1, cellE5);

            int[,] myArray = new int[4, 4];
            for (int col = 0; col < myArray.GetLength(0); col++)
            {
                for (int row = 0; row < myArray.GetLength(1); row++)
                {
                    myArray[col, row] = (col + row) * 2;
                }
            }
            myRange.Value = myArray;
        }

Это Excel.Workbook Open:

public static Excel.Workbook Open(Excel.Application excelInstance,
        string fileName, bool readOnly = false, bool editable = true,
        bool updateLinks = true)
{
    Excel.Workbook book = excelInstance.Workbooks.Open(
        fileName, updateLinks, readOnly,
        Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing,
        Type.Missing, editable, Type.Missing, Type.Missing, Type.Missing,
        Type.Missing, Type.Missing);
    return book;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...