Я создал проект, который экспортирует файл Excel в gridView и импортирует его в word.Прямо сейчас я добился этого, щелкнув по идентификатору каждой строки, который отправляется в метод ExportData ().
Теперь я хочу достичь, нажав кнопку ImportALL, создавая отдельные текстовые документы для каждой строки в gridView..
Например, для каждой строки в gridview я хочу иметь что-то вроде
doc1.docx (включая данные первой строки gridview)
doc2.docx (включая вторую gridviewданные строки)
doc3.docx (включая данные третьей строки gridview)
Например:
Вот моя модель .cs
public class Doc
{
public int Id { get; set; }
public string Name { get; set; }
public decimal Price { get; set; }
public string Quantity { get; set; }
public string PriceWord { get; set; }
}
Здесьмое чтение экспортирует данные Excel в контроллере
if (excelFile.FileName.EndsWith("xls") || excelFile.FileName.EndsWith("xlsx"))
{
string path = Server.MapPath("~/Content/" + excelFile.FileName);
if (System.IO.File.Exists(path))
{
System.IO.File.Delete(path);
}
excelFile.SaveAs(path);
ExcelDoc.Application application = new ExcelDoc.Application();
ExcelDoc.Workbook workbook = application.Workbooks.Open(path);
ExcelDoc.Worksheet worksheet = workbook.ActiveSheet;
ExcelDoc.Range range = worksheet.UsedRange;
List<Doc> docs = new List<Doc>();
for (int row = 2; row < range.Rows.Count; row++)
{
Doc d = new Doc();
d.Id = Int32.Parse(((ExcelDoc.Range)range.Cells[row, 1]).Text);
d.Name = ((ExcelDoc.Range)range.Cells[row, 2]).Text;
d.Price = Decimal.Parse((((ExcelDoc.Range)range.Cells[row, 3]).Text));
d.PriceWord = numberToWordConverter(s.Price.ToString());
d.Quantity = ((ExcelDoc.Range)range.Cells[row, 4]).Text;
docs.Add(d);
}
ViewBag.Docs = docs;
TempData["docs"] = docs;
return View("Success");
}
else
{
ViewBag.Error = "File type is incorrect";
return View("Index");
}
И вот метод экспорта слова.
public ActionResult ExportData(int? id)
{
var docs = TempData["Docs"] as List<Doc>;
GridView gv = new GridView();
gv.DataSource = docs.Where(x=> x.Id == id);
gv.DataBind();
Response.ClearContent();
Response.Buffer = true;
Response.AddHeader("content-disposition", "attachment; filename=dosya.doc");
Response.ContentType = "application/vnd.ms-word ";
Response.Charset = string.Empty;
StringWriter sw = new StringWriter();
HtmlTextWriter htw = new HtmlTextWriter(sw);
gv.RenderControl(htw);
Response.Output.Write(sw.ToString());
Response.Flush();
Response.End();
return RedirectToAction("Index");
}
Кроме того, у меня проблема с нижней частью.Если я не остановил выполнение файла Excel в диспетчере задач, у меня возникает ошибка типа «невозможно получить доступ, поскольку он используется другим процессом»
if (System.IO.File.Exists(path))
{
System.IO.File.Delete(path);
}