Запишите массив в Excel Range

У меня была та же проблема, эээ, потратили несколько часов, пока, наконец, не нашли решение

Короче:

1) Создать частную сущность [ 115] android-sdk-license.sh с таким содержанием:

#!/bin/bash

set -ex

cd $ANDROID_HOME
mkdir -p licenses

cat << EOF >> licenses/android-sdk-license
8933bad161af4178b1185d1a37fbf41ea5269c55
d56f5187479451eabf01fb78af6dfcb131a6481e
24333f8a63b6825ea9c5514f83c2829b004d1fee
EOF

2) Получить необработанную ссылку на этот файл
3) Создать jitpack.yml в корне вашего проекта с таким содержанием: [ 1110]

#!/bin/bash

before_install:
- curl PASTE_RAW_LINK_TO_GIST | sh

4) Commit & amp; push

Надеюсь, это поможет

51
задан John Saunders 27 May 2014 в 12:42
поделиться

4 ответа

Это - выборка из моего метода, который преобразовывает DataTable (dt переменная) в массив и затем пишет массив в Диапазон на рабочем листе (wsh var). Можно также заменить topRow переменную к любой строке, в которую Вы хотите, чтобы массив строк был помещен.

        object[,] arr = new object[dt.Rows.Count, dt.Columns.Count];
        for (int r = 0; r < dt.Rows.Count; r++)
        {
            DataRow dr = dt.Rows[r];
            for (int c = 0; c < dt.Columns.Count; c++)
            {
                arr[r, c] = dr[c];
            }
        }

        Excel.Range c1 = (Excel.Range)wsh.Cells[topRow, 1];
        Excel.Range c2 = (Excel.Range)wsh.Cells[topRow + dt.Rows.Count - 1, dt.Columns.Count];
        Excel.Range range = wsh.get_Range(c1, c2);

        range.Value = arr;

, Конечно, Вы не должны использовать промежуточный DataTable как, я сделал, выборка кода должна только продемонстрировать, как массив может быть записан в рабочий лист в единственном вызове.

90
ответ дан AbdelAziz AbdelLatef 7 November 2019 в 10:01
поделиться

Спасибо за парней указателей - Значение по сравнению с аргументом Value2 получило меня другой набор результатов поиска, которые помогли мне понять, каков ответ. Кстати, свойство Value является параметрическим свойством, к которому нужно получить доступ через средство доступа в C#. Их называют get_Value и set_Value, и берут дополнительное перечисление значений. Если кто-либо заинтересовал, это объясняет это приятно .

возможно сделать присвоение через свойство Value2 однако, которое предпочтительно, как interop документация рекомендует против использования использования get_Value и set_Value методов по причинам вне моего понимания.

ключ, кажется, размер массива объектов. Чтобы вызов работал, массив должен быть объявлен как двумерный, даже если Вы только присваиваете одномерные данные.

я объявил свой массив данных как object[NumberofRows,1], и вызов присвоения работал.

10
ответ дан Jon Artus 7 November 2019 в 10:01
поделиться

Вы могли поместить свои данные в recordset и использование Метод CopyFromRecordset Excel - это намного быстрее, чем заполнение ячейки ячейкой.

можно создать recordset из набора данных с помощью этот код . Необходимо будет сделать, некоторые пробные версии для наблюдения при использовании этого метода быстрее, чем, что Вы в настоящее время делаете.

4
ответ дан Galwegian 7 November 2019 в 10:01
поделиться

добавьте класс ExcelUtility к своему проекту и наслаждайтесь им.

содержание файла ExcelUtility.cs :

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

static class ExcelUtility
{
    public static void WriteArray<T>(this _Worksheet sheet, int startRow, int startColumn, T[,] array)
    {
        var row = array.GetLength(0);
        var col = array.GetLength(1);
        Range c1 = (Range) sheet.Cells[startRow, startColumn];
        Range c2 = (Range) sheet.Cells[startRow + row - 1, startColumn + col - 1];
        Range range = sheet.Range[c1, c2];
        range.Value = array;
    }

    public static bool SaveToExcel<T>(T[,] data, string path)
    {
        try
        {
            //Start Excel and get Application object.
            var oXl = new Application {Visible = false};

            //Get a new workbook.
            var oWb = (_Workbook) (oXl.Workbooks.Add(""));
            var oSheet = (_Worksheet) oWb.ActiveSheet;
            //oSheet.WriteArray(1, 1, bufferData1);

            oSheet.WriteArray(1, 1, data);

            oXl.Visible = false;
            oXl.UserControl = false;
            oWb.SaveAs(path, XlFileFormat.xlWorkbookDefault, Type.Missing,
                Type.Missing, false, false, XlSaveAsAccessMode.xlNoChange,
                Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing);
            oWb.Close(false);
            oXl.Quit();
        }
        catch (Exception e)
        {
            return false;
        }

        return true;
    }
}

использование:

var data = new[,]
{
    {11, 12, 13, 14, 15, 16, 17, 18, 19, 20},
    {21, 22, 23, 24, 25, 26, 27, 28, 29, 30},
    {31, 32, 33, 34, 35, 36, 37, 38, 39, 40}
};

ExcelUtility.SaveToExcel(data, "test.xlsx");

С наилучшими пожеланиями!

1
ответ дан 7 November 2019 в 10:01
поделиться
Другие вопросы по тегам:

Похожие вопросы: