Отправьте результаты запроса в Excel с веб-сайта ASP.NET

Используйте это регулярное выражение:

/\(\{#(.*?)#\}\)/g

и получите первое совпадение группы захвата:

/\(\{#(.*?)#\})\)/g.exec("({#test#})")[1] === "test"

Группы захвата - это выражения в скобках в выражении, которые сохранят часть текста. это соответствует. Вы можете иметь несколько, но в этом случае нам нужен только один.

.*? прост, но не эффективен, если у вас есть регулярное выражение для word, используйте его вместо этого.

Подробнее о захвате групп:

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp#grouping-back-references [ 114]

5
задан Jim 29 September 2008 в 14:35
поделиться

7 ответов

Измените тип файла страницы, чтобы выделиться и только передать потоком HTML, необходимый для создания таблицы к странице. кодируйте отсюда

//for demo purpose, lets create a small datatable & populate it with dummy data
System.Data.DataTable workTable = new System.Data.DataTable();

//The tablename specified here will be set as the worksheet name of the generated Excel file. 
workTable.TableName = "Customers";
workTable.Columns.Add("Id");
workTable.Columns.Add("Name");
System.Data.DataRow workRow;

for (int i = 0; i <= 9; i++)
{
workRow = workTable.NewRow();
workRow[0] = i;
workRow[1] = "CustName" + i.ToString();
workTable.Rows.Add(workRow);
}

//...and lets put DataTable2ExcelString to work
string strBody = DataTable2ExcelString(workTable);

Response.AppendHeader("Content-Type", "application/vnd.ms-excel");
Response.AppendHeader("Content-disposition", "attachment; filename=my.xls");
Response.Write(strBody);
10
ответ дан 13 December 2019 в 05:44
поделиться

После того как у Вас есть свой Набор данных, можно преобразовать его в объект и вставить его в документ Excel. Затем можно сохранить документ на диск и передать его потоком пользователю.

        //write the column headers
        for (int cIndex = 1; cIndex < 1 + columns; cIndex++)
            sheet.Cells.set_Item(4, cIndex, data.Columns[cIndex - 1].Caption);
        if (rows > 0)
        {

            //select the range where the data will be pasted
            Range r = sheet.get_Range(sheet.Cells[5, 1], sheet.Cells[5 + (rows - 1), columns]);

            //Convert the datatable to an object array
            object[,] workingValues = new object[rows, columns];

            for (int rIndex = 0; rIndex < rows; rIndex++)
                for (int cIndex = 0; cIndex < columns; cIndex++)
                    workingValues[rIndex, cIndex] = data.Rows[rIndex][cIndex].ToString();

            r.Value2 = workingValues;
         }
0
ответ дан 13 December 2019 в 05:44
поделиться

Я получил функцию utils, которая уже делает это. После того как Вы помещаете его в таблицу данных, можно экспортировать его с использованием Ответа

        public static void DataTabletoXLS(DataTable DT, string fileName)
    {
        HttpContext.Current.Response.Clear();
        HttpContext.Current.Response.Charset = "utf-16";
        HttpContext.Current.Response.ContentEncoding = System.Text.Encoding.GetEncoding("windows-1250");
        HttpContext.Current.Response.AddHeader("content-disposition", string.Format("attachment; filename={0}.xls", fileName));
        HttpContext.Current.Response.ContentType = "application/ms-excel";

        string tab = "";
        foreach (DataColumn dc in DT.Columns)
        {
            HttpContext.Current.Response.Write(tab + dc.ColumnName.Replace("\n", "").Replace("\t", ""));
            tab = "\t";
        }
        HttpContext.Current.Response.Write("\n");

        int i;
        foreach (DataRow dr in DT.Rows)
        {
            tab = "";
            for (i = 0; i < DT.Columns.Count; i++)
            {
                HttpContext.Current.Response.Write(tab + dr[i].ToString().Replace("\n", "").Replace("\t", ""));
                tab = "\t";
            }
            HttpContext.Current.Response.Write("\n");
        }
        HttpContext.Current.Response.End();
               }
1
ответ дан 13 December 2019 в 05:44
поделиться

Я рекомендовал бы использовать filehandler (.ashx), единственная проблема создает файл Excel из DataTable. Существует много сторонних продуктов, которые сделают это для Вас (например, Infragistics обеспечивает компонент, который делает просто это).

Одна вещь, против которой я настоятельно рекомендую, использует Excel interop на Вашем сервере... это очень тяжело и не поддерживается.

0
ответ дан 13 December 2019 в 05:44
поделиться

При создании страницы, которая является просто таблицей с результатами и устанавливает тип контента страницы на "application/vnd.ms-excel", то вывод будет в Excel.

Response.ContentType = "application/vnd.ms-excel";

Если бы Вы хотите вызвать сохранение, Вы сделали бы что-то как следующее:

Response.AddHeader("Content-Disposition", "attachment; filename=somefilename.xls");
1
ответ дан 13 December 2019 в 05:44
поделиться

Я использовал бы обработчик для .xls расширения файла и свободного компонента для преобразования DataTable в собственный xls формат. Компонент от этого сайта, который http://www.csvreader.com/ делает больше, который подразумевает URL. Новейшая версия Excel будет жаловаться на отформатированный файл HTML XLS. Также имейте в виду размер возвращаемых данных. Ваш веб-сервер должен использовать сжатие для этого расширения, и Ваш код должен проверить, больше ли количество возвращенных строк, чем, что Excel может отобразить в одном рабочем листе; могут требоваться несколько листов. http://www.mrexcel.com/archive2/23600/26869.htm

0
ответ дан 13 December 2019 в 05:44
поделиться

Kindly use this code to resolve your problem.This code will convert excel sheet to text format.Hope this will solve your problem

    grdSrcRequestExport.RenderControl(oHtmlTextWriter);
    string s = "";
    s=oStringWriter.ToString().Replace("<table cellspacing=\"0\" rules=\"all\" border=\"1\" style=\"border-collapse:collapse;\">", "");
    s="<html xmlns:o=\"urn:schemas-microsoft-com:office:office\" xmlns:x=\"urn:schemas-microsoft-com:office:excel\" xmlns=\"http://www.w3.org/TR/REC-html40\"><head><meta http-equiv=Content-Type content=\"text/html; charset=us-ascii\"><meta name=ProgId content=Excel.Sheet><meta name=Generator content=\"Microsoft Excel 11\"><table x:str border=0 cellpadding=0 cellspacing=0 width=560 style='border-collapse: collapse;table-layout:fixed;width:420pt'>"+s.ToString()+"</table></body></html>";
    //Byte[] bContent = System.Text.Encoding.GetEncoding("utf-8").GetBytes();
    Response.Write(s);
0
ответ дан 13 December 2019 в 05:44
поделиться
Другие вопросы по тегам:

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