Nawab Ahmad Ответов: 1

Как экспортировать таблицу в Excel


Привет,

Я работаю над приведенным ниже образцом кода, найденным в google :)

using (SpreadsheetDocument xl = SpreadsheetDocument.Create("LargeFile.xlsx", SpreadsheetDocumentType.Workbook))
{
    List<OpenXmlAttribute> oxa;
    OpenXmlWriter oxw;

    xl.AddWorkbookPart();
    WorksheetPart wsp = xl.WorkbookPart.AddNewPart<WorksheetPart>();

    oxw = OpenXmlWriter.Create(wsp);
    oxw.WriteStartElement(new Worksheet());
    oxw.WriteStartElement(new SheetData());

    for (int i = 1; i <= 50000; ++i)
    {
        oxa = new List<OpenXmlAttribute>();
        // this is the row index
        oxa.Add(new OpenXmlAttribute("r", null, i.ToString()));

        oxw.WriteStartElement(new Row(), oxa);

        for (int j = 1; j <= 100; ++j)
        {
            oxa = new List<OpenXmlAttribute>();
            // this is the data type ("t"), with CellValues.String ("str")
            oxa.Add(new OpenXmlAttribute("t", null, "str"));

            // it's suggested you also have the cell reference, but
            // you'll have to calculate the correct cell reference yourself.
            // Here's an example:
            //oxa.Add(new OpenXmlAttribute("r", null, "A1"));

            oxw.WriteStartElement(new Cell(), oxa);

            oxw.WriteElement(new CellValue(string.Format("R{0}C{1}", i, j)));

            // this is for Cell
            oxw.WriteEndElement();
        }

        // this is for Row
        oxw.WriteEndElement();
    }

    // this is for SheetData
    oxw.WriteEndElement();
    // this is for Worksheet
    oxw.WriteEndElement();
    oxw.Close();

    oxw = OpenXmlWriter.Create(xl.WorkbookPart);
    oxw.WriteStartElement(new Workbook());
    oxw.WriteStartElement(new Sheets());

    // you can use object initialisers like this only when the properties
    // are actual properties. SDK classes sometimes have property-like properties
    // but are actually classes. For example, the Cell class has the CellValue
    // "property" but is actually a child class internally.
    // If the properties correspond to actual XML attributes, then you're fine.
    oxw.WriteElement(new Sheet()
    {
        Name = "Sheet1",
        SheetId = 1,
        Id = xl.WorkbookPart.GetIdOfPart(wsp)
    });

    // this is for Sheets
    oxw.WriteEndElement();
    // this is for Workbook
    oxw.WriteEndElement();
    oxw.Close();

    xl.Close();
}



Но не в состоянии изменить на основе моих требований к строке и столбцу datatable.
Может ли кто-нибудь изменить этот фрагмент кода, чтобы принять строку и столбец datatable?

Что я уже пробовал:

я попробовал изменить но не получилось

[no name]

"Может ли кто-то изменить этот кусок кода", да, кто-то может, вы можете. Даже если бы мы были сайтом, где вы могли бы выполнять свою работу бесплатно (это не так), мы бы вообще не имели ни малейшего представления о том, что такое ваши "требования к строкам и столбцам данных" или что означает "но не работает".

Nawab Ahmad

объект DataTable Таблица 1 Таблица
table. row[0] - это строка

Karthik_Mahalingam

Всегда использовать  Ответить  кнопка, чтобы отправить комментарии / запрос пользователю, чтобы пользователь получил уведомление и ответил на ваш текст.

1 Ответов

Рейтинг:
2

#realJSOP

Вы можете экспортировать datatable в XML-файл с помощью DataTable.WriteXml(filename), а затем загрузите XML-файл в Excel. Для этого вам не нужна сторонняя библиотека.

РЕДАКТИРОВАТЬ=====================

Относительно количества строк:

Вы можете разбить таблицу данных на более мелкие фрагменты, используя цикл, содержащий DataTable.ImportRow метод.


Nawab Ahmad

Да, я могу, но я пытаюсь экспортировать 1 миллион записей

#realJSOP

Это не объясняет, почему вы не можете использовать его. Excel поддерживает 1 048 576 строк по 16 384 столбца на лист. Если ваш набор данных содержит больше строк, чем это, вам придется разбить его на более управляемые куски.

Nawab Ahmad

Легко сказать...но это не мое требование.