Экспорт Datagrid в Excel - PullRequest
       25

Экспорт Datagrid в Excel

1 голос
/ 07 ноября 2008

Каков наилучший способ экспортировать Datagrid, чтобы преуспеть? У меня нет никакого опыта в экспорте сетки данных в Excel, поэтому я хочу знать, как вы, ребята, экспортируете сетку данных в Excel. Я читал, что есть много способов, но я думаю просто сделать простой экспорт Excel в функцию DataGrid. Я использую asp.net C #

ура ..

Ответы [ 4 ]

6 голосов
/ 07 ноября 2008

Самый простой способ - просто записать csv или html (в частности, <table><tr><td>...</td></tr>...</table>) в вывод и просто притвориться, что он в формате excel через заголовок типа содержимого. Excel с удовольствием загрузится; CSV проще ...

Вот аналогичный пример (на самом деле он принимает IEnumerable, но он будет аналогичен любому источнику (например, DataTable, циклически перебирая строки).

        public static void WriteCsv(string[] headers, IEnumerable<string[]> data, string filename)
        {
            if (data == null) throw new ArgumentNullException("data");
            if (string.IsNullOrEmpty(filename)) filename = "export.csv";

            HttpResponse resp = System.Web.HttpContext.Current.Response;
            resp.Clear();
            // remove this line if you don't want to prompt the user to save the file
            resp.AddHeader("Content-Disposition", "attachment;filename=" + filename);
            // if not saving, try: "application/ms-excel"
            resp.ContentType = "text/csv";
            string csv = GetCsv(headers, data);
            byte[] buffer = resp.ContentEncoding.GetBytes(csv);
            resp.AddHeader("Content-Length", buffer.Length.ToString());
            resp.BinaryWrite(buffer);
            resp.End();
        }
        static void WriteRow(string[] row, StringBuilder destination)
        {
            if (row == null) return;
            int fields = row.Length;
            for (int i = 0; i < fields; i++)
            {
                string field = row[i];
                if (i > 0)
                {
                    destination.Append(',');
                }
                if (string.IsNullOrEmpty(field)) continue; // empty field

                bool quote = false;
                if (field.Contains("\""))
                {
                    // if contains quotes, then needs quoting and escaping
                    quote = true;
                    field = field.Replace("\"", "\"\"");
                }
                else
                {
                    // commas, line-breaks, and leading-trailing space also require quoting
                    if (field.Contains(",") || field.Contains("\n") || field.Contains("\r")
                        || field.StartsWith(" ") || field.EndsWith(" "))
                    {
                        quote = true;
                    }
                }
                if (quote)
                {
                    destination.Append('\"');
                    destination.Append(field);
                    destination.Append('\"');
                }
                else
                {
                    destination.Append(field);
                }

            }
            destination.AppendLine();
        }
        static string GetCsv(string[] headers, IEnumerable<string[]> data)
        {
            StringBuilder sb = new StringBuilder();
            if (data == null) throw new ArgumentNullException("data");
            WriteRow(headers, sb);
            foreach (string[] row in data)
            {
                WriteRow(row, sb);

            }
            return sb.ToString();
        }
2 голосов
/ 07 ноября 2008

Вы можете сделать это следующим образом:

private void ExportButton_Click(object sender, System.EventArgs e)
{
  Response.Clear();
  Response.Buffer = true;
  Response.ContentType = "application/vnd.ms-excel";
  Response.Charset = "";
  this.EnableViewState = false;
  System.IO.StringWriter oStringWriter = new System.IO.StringWriter();
 System.Web.UI.HtmlTextWriter oHtmlTextWriter = new System.Web.UI.HtmlTextWriter(oStringWriter);
  this.ClearControls(dataGrid);
  dataGrid.RenderControl(oHtmlTextWriter);
  Response.Write(oStringWriter.ToString());
  Response.End();
}

Полный пример здесь .

0 голосов
/ 29 августа 2009

SpreadsheetGear for .NET сделает это.

Здесь вы можете увидеть живые примеры ASP.NET с исходным кодом C # и VB здесь . Некоторые из этих примеров демонстрируют преобразование DataSet или DataTable в Excel - и вы легко можете получить DataSet или DataTable из DataGrid. Вы можете скачать бесплатную пробную версию здесь , если хотите попробовать сами.

Отказ от ответственности: я владею SpreadsheetGear LLC

0 голосов
/ 01 апреля 2009

Экспорт значений в Excel или Word или PDF Check http://techdotnets.blogspot.com/

...