как создать и загрузить документ Excel с помощью asp.net

Я предлагаю заключить обе вставки в один запрос с помощью CTE, модифицирующего данные , например:

WITH grp_ins AS (
   INSERT INTO groups (name, creator)
   VALUES ($1, $2)
   RETURNING id, creator
   )
INSERT INTO groupmembers (groupid, userid)
SELECT g.id, u.id 
FROM   grp_ins    g
JOIN   users u ON u.email = g.creator;

, поскольку groups.creator определено [ 114] с ограничением FK, обеспечивающим ссылочную целостность, [INNER] JOIN - это хорошо. Иначе я бы рассмотрел LEFT JOIN.

Очень похоже на ответ, на который вы ссылались . Или эти:

Если по какой-то причине вы не можете применить приведенную выше команду (например, вложенную в функцию, которая должна использоваться для вставки в groups), следующая лучшая вещь - это [1116 ] запускает AFTER INSERT для выполнения второго INSERT. Немного сложнее и дороже. Но выполняет свою работу:

CREATE OR REPLACE FUNCTION trg_ins_row_in_groupmembers()
  RETURNS trigger AS
$func$
BEGIN
   INSERT INTO groupmembers (groupid, userid)
   SELECT NEW.id, (SELECT u.id FROM users u WHERE u.email = NEW.creator);

   RETURN NEW;  -- doesn't matter much what you return here
END
$func$  LANGUAGE plpgsql;

И триггер AFTER INSERT на groups:

CREATE TRIGGER groups_ins_aft
AFTER INSERT ON groups
FOR EACH ROW EXECUTE PROCEDURE trg_ins_row_in_groupmembers();

Связанный:

11
задан Matt Ellen 8 July 2019 в 11:02
поделиться

4 ответа

Стартовый набор

Сначала я загрузил Открыть XML Format SDK 2.0.

Это идет с 3 полезными инструментами в:

C:\Program Files\Open XML Format SDK\V2.0\tools

  • DocumentReflector.exe который автоматический генерируют c# для создания электронной таблицы из кода.
  • OpenXmlClassesExplorer.exe отобразите спецификацию Ecma и документацию класса (использующий формат стиля MSDN).
  • OpenXmlDiff.exe графически сравните два Открытых XML-файла и ищите ошибки.

Я предлагаю любого, кто начинает переименовывать .xlsx к .zip, таким образом, Вы видите XML-файлы, кто управляет нашей электронной таблицей (для примера, наши листы находятся в "xl\worksheets").


Код

Правовая оговорка: Я украл весь код из MSDN техническая статья; D

Следующий код использует шаблон *.xlsx, который я сделал вручную, чтобы смочь изменить его.

Ссылки пространств имен

using System.IO;
using System.Xml;
using DocumentFormat.OpenXml.Packaging;
using DocumentFormat.OpenXml.Spreadsheet;
using DocumentFormat.OpenXml;


// Database object
        DataClassesDataContext db = new DataClassesDataContext();

        // Make a copy of the template file.
        File.Copy(@"C:\inetpub\wwwroot\project.Web\Clients\Handlers\oxml-tpl\livreurs.xlsx", @"C:\inetpub\wwwroot\project.Web\Clients\Handlers\oxml-tpl\generated.xlsx", true);

        // Open the copied template workbook. 
        using (SpreadsheetDocument myWorkbook = SpreadsheetDocument.Open(@"C:\inetpub\wwwroot\project.Web\Clients\Handlers\oxml-tpl\generated.xlsx", true))
        {
            // Access the main Workbook part, which contains all references.
            WorkbookPart workbookPart = myWorkbook.WorkbookPart;

            // Get the first worksheet. 
            WorksheetPart worksheetPart = workbookPart.WorksheetParts.ElementAt(2);

            // The SheetData object will contain all the data.
            SheetData sheetData = worksheetPart.Worksheet.GetFirstChild<SheetData>();

            // Begining Row pointer                       
            int index = 2;

            // Database results
            var query = from t in db.Clients select t;

            // For each item in the database, add a Row to SheetData.
            foreach (var item in query)
            {
                // Cell related variable
                string Nom = item.Nom;

                // New Row
                Row row = new Row();
                row.RowIndex = (UInt32)index;

                // New Cell
                Cell cell = new Cell();
                cell.DataType = CellValues.InlineString;
                // Column A1, 2, 3 ... and so on
                cell.CellReference = "A"+index;

                // Create Text object
                Text t = new Text();
                t.Text = Nom;

                // Append Text to InlineString object
                InlineString inlineString = new InlineString();
                inlineString.AppendChild(t);

                // Append InlineString to Cell
                cell.AppendChild(inlineString);

                // Append Cell to Row
                row.AppendChild(cell);

                // Append Row to SheetData
                sheetData.AppendChild(row);

                // increase row pointer
                index++;                

            }

            // save
            worksheetPart.Worksheet.Save();

        }

Я еще не закончил, моя вторая работа является к автоматической загрузке электронной таблицей после модификации.


Наконец, я перенаправляю пользователя к своей сгенерированной электронной таблице (от моего aspx)

 context.Response.Redirect("Oxml-tpl/generated.xlsx");
15
ответ дан 3 December 2019 в 07:14
поделиться

просто Ответ набора. ContentType = "application/vnd.ms-excel" и Ваша страница будет представленный как лист Excel на клиентском браузере

Пример кода здесь

2
ответ дан 3 December 2019 в 07:14
поделиться

Существует довольно много способов обработать это, в зависимости от того, насколько обширный функциональность Excel. Ответ Binoj работает, если Excel является просто электронной таблицей и не имеет никакой прямой встроенной функциональности Excel. Клиент может добавить функциональность, concats, и т.д. Это "немые" документы Excel, пока клиент не делает soemthing.

Создать более полнофункциональный документ Excel, Вы havve два основных варианта, о которых я могу думать бесцеремонно.

  1. Используйте любого офисные компоненты (ре: плохо) для создания документа Excel или стороннего компонента, как ExcelWriter SoftArtisan. Большой компонент, но существует стоимость.

  2. Используйте управление на странице, которая позволяет экспорт в Excel. У большинства поставщиков средств управления ASSP.NET есть эта функциональность на их сетках.

Опция № 1 позволяет Вам в значительной степени всю функциональность Excel. Опция № 2 немного более ограничена, по крайней мере, в средствах управления, которые я попробовал.

0
ответ дан 3 December 2019 в 07:14
поделиться

Хорошая статья от Эрики Эрли о том, как улучшить экспорт. http://blogs.msdn.com/erikaehrli/archive/2009/01/30/how-to-export-data-to-excel-from-an-asp-net-application-avoid-the-file -format-Different-prompt.aspx

0
ответ дан 3 December 2019 в 07:14
поделиться
Другие вопросы по тегам:

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