Используйте это регулярное выражение:
/\(\{#(.*?)#\}\)/g
и получите первое совпадение группы захвата:
/\(\{#(.*?)#\})\)/g.exec("({#test#})")[1] === "test"
Группы захвата - это выражения в скобках в выражении, которые сохранят часть текста. это соответствует. Вы можете иметь несколько, но в этом случае нам нужен только один.
.*?
прост, но не эффективен, если у вас есть регулярное выражение для word
, используйте его вместо этого.
Подробнее о захвате групп:
Измените тип файла страницы, чтобы выделиться и только передать потоком 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);
После того как у Вас есть свой Набор данных, можно преобразовать его в объект и вставить его в документ 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;
}
Я получил функцию 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();
}
Я рекомендовал бы использовать filehandler (.ashx), единственная проблема создает файл Excel из DataTable. Существует много сторонних продуктов, которые сделают это для Вас (например, Infragistics обеспечивает компонент, который делает просто это).
Одна вещь, против которой я настоятельно рекомендую, использует Excel interop на Вашем сервере... это очень тяжело и не поддерживается.
При создании страницы, которая является просто таблицей с результатами и устанавливает тип контента страницы на "application/vnd.ms-excel", то вывод будет в Excel.
Response.ContentType = "application/vnd.ms-excel";
Если бы Вы хотите вызвать сохранение, Вы сделали бы что-то как следующее:
Response.AddHeader("Content-Disposition", "attachment; filename=somefilename.xls");
Я использовал бы обработчик для .xls расширения файла и свободного компонента для преобразования DataTable в собственный xls формат. Компонент от этого сайта, который http://www.csvreader.com/ делает больше, который подразумевает URL. Новейшая версия Excel будет жаловаться на отформатированный файл HTML XLS. Также имейте в виду размер возвращаемых данных. Ваш веб-сервер должен использовать сжатие для этого расширения, и Ваш код должен проверить, больше ли количество возвращенных строк, чем, что Excel может отобразить в одном рабочем листе; могут требоваться несколько листов. http://www.mrexcel.com/archive2/23600/26869.htm
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);