Я знаю, что по этому вопросу есть много тем, но мои требования более конкретны. Я использую EF для выбора записей в своем проекте, а затем экспортирую их в Excel. Я использовал Этот фрагмент кода .
Позвольте мне объяснить, что я пытаюсь сделать. Учитывая следующую таблицу (это для упрощения, как вы увидите в коде, таблица немного больше):
Name | Content
A "Content1"
A "Content2"
A "Content3"
B "other content"
......
Когда я экспортирую в Excel, я не хочу, чтобы A
появлялся 3 раза рядом с каждым контентом, я хотел бы иметь только одну букву «А» (что я смог сделать) и объединить 3 ячейки. (выровняйте их по центру, если это возможно) в один (не касаясь столбца Content
).
Это мой код:
public IActionResult Index()
{
var knownCampaigns = _repository.getDataForExport();
//return View(result);
string sWebRootFolder = _hostingEnvironment.WebRootPath;
string sFileName = @"demo.xlsx";
string URL = string.Format("{0}://{1}/{2}", Request.Scheme, Request.Host, sFileName);
FileInfo file = new FileInfo(Path.Combine(sWebRootFolder, sFileName));
if (file.Exists)
{
file.Delete();
file = new FileInfo(Path.Combine(sWebRootFolder, sFileName));
}
using (ExcelPackage package = new ExcelPackage(file))
{
// add a new worksheet to the empty workbook
ExcelWorksheet worksheet = package.Workbook.Worksheets.Add("CampaignMatches");
//First add the headers
worksheet.Cells[1, 2].Value = "Customer Name";
worksheet.Cells[1, 3].Value = "Guid";
worksheet.Cells[1, 4].Value = "Campaign Title";
worksheet.Cells[1, 5].Value = "Referrer Title";
worksheet.Cells[1, 6].Value = "Activity Date";
worksheet.Cells[1, 7].Value = "Is clicked?";
int counter = 2;
string oldGuid = "";
foreach (var campaign in knownCampaigns)
{
if (oldGuid == campaign.Guid || worksheet.Cells["C" + (counter - 1)].Value.ToString() == campaign.Guid)
{
oldGuid = campaign.Guid;
worksheet.Cells["A" + counter].Value = "";
worksheet.Cells["B" + counter].Value = "";
}
else
{
oldGuid = "";
worksheet.Cells["A" + counter].Value = campaign.customerName;
worksheet.Cells["B" + counter].Value = campaign.Guid;
}
worksheet.Cells["C" + counter].Value = campaign.campaignTitle;
worksheet.Cells["D" + counter].Value = campaign.reffererTitle;
worksheet.Cells["E" + counter].Value = campaign.activityDate;
worksheet.Cells["F" + counter].Value = campaign.is_clicked;
counter++;
}
package.Save(); //Save the workbook.
}
var result = PhysicalFile(Path.Combine(sWebRootFolder, sFileName), "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
Response.Headers["Content-Disposition"] = new ContentDispositionHeaderValue("attachment")
{
FileName = file.Name
}.ToString();
return result;
}
Прямо сейчас мой столбец Customer Name
и Guid
отображается только один раз, как и предполагалось, но я не знаю, как объединить ячейки в одну ячейку.
Изображение токового выхода:
[! [Введите описание изображения здесь] [2]] [2]
Изображение желаемого результата:
[! [Введите описание изображения здесь] [3]] [3]