Экспорт HTML-таблицы в asp.net MVC - PullRequest
7 голосов
/ 09 января 2009

Я пытаюсь экспортировать таблицу HTML с именем Table, которая динамически связывается с ViewData.Model в C #. У меня есть метод с именем export, который вызывается на основе действий другого метода. так что все до этого настроено .. Я просто не знаю, как экспортировать данные в файл CSV или Excel .. Поэтому, когда я перехожу внутрь метода Export, я не знаю, что делать дальше, чтобы экспортировать таблицу , Может ли кто-нибудь помочь мне

    public void Export(List<data> List)
    {
     //the list is the rows that are checked and need to be exported
       StringWriter sw = new StringWriter();

     //I don't believe any of this syntax is right, but if they have Excel export to excel and if not export to csv  "|" delimeted

   for(int i=0; i<List.Count;i++)
    {
              sw.WriteLine(List[i].ID+ "|" + List[i].Date + "|" + List[i].Description);

    }
    Response.AddHeader("Content-Disposition", "attachment; filename=test.csv");
    Response.ContentType = "application/ms-excel";
    Response.ContentEncoding = System.Text.Encoding.GetEncoding("utf-8");
    Response.Write(sw);
    Response.End(); 

    }

Ответы [ 4 ]

15 голосов
/ 12 января 2009

Я не совсем понимаю весь «экспорт таблицы HTML с именем Table, которая динамически привязана к ViewData.Model», поэтому я просто проигнорирую это и сосредоточусь на вашем Export (List list) метод. Кстати, вы никогда не упоминали, что происходит и где.

Я вижу, что вы написали "если у них есть экспорт в Excel в Excel и если не экспорт в CSV" - я бы лично экспортировал его как файл CSV в обоих случаях, потому что Excel может без проблем обрабатывать файлы CSV.

Итак, с учетом этого, вот мой метод экспорта, основанный на вашем коде.

public void Export(List<DataType> list)
{
    StringWriter sw = new StringWriter();

    //First line for column names
    sw.WriteLine("\"ID\",\"Date\",\"Description\"");

    foreach(DataType item in list)
    {
        sw.WriteLine(string.format("\"{0}\",\"{1}\",\"{2}\"",
                                   item.ID,
                                   item.Date,
                                   item.Description));
    }

    Response.AddHeader("Content-Disposition", "attachment; filename=test.csv");
    Response.ContentType = "text/csv";
    Response.ContentEncoding = System.Text.Encoding.GetEncoding("utf-8");
    Response.Write(sw);
    Response.End(); 
}
2 голосов
/ 16 июля 2009

Это отличный пример, но я думаю, что нужна модификация глобализации.

String ltListSeparator = CultureInfo.CurrentUICulture.TextInfo.ListSeparator;
sw.WriteLine(string.format("{0}" + ltListSeparator + "{1}" + ltListSeparator + "{2}", item.ID, item.Date, item.Description));
1 голос
/ 09 января 2009

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

        Response.ClearContent();    
        Response.AddHeader("content-disposition", attachment);    
        Response.ContentType = "application/ms-excel";                
        Response.Write(yourDataAndHtmlAsString);
        Response.End();
0 голосов
/ 09 января 2009

CSV - это простой формат, который можно легко создать в виде строки.

http://en.wikipedia.org/wiki/Comma-separated_values

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...