[英]C# Merge Cells where values are the same
目標:
我的目標是合並特定列中具有相同值的單元格。
已經有將數據從 MySQL 導出到 Excel 的代碼,只需要最后一點。
當前代碼:
System.Data.DataTable dt = new System.Data.DataTable();
using(MySqlConnection conn = new MySqlConnection(ConnectionString.ConnString))
{
conn.Open();
using (MySqlDataAdapter da = new MySqlDataAdapter(@"SELECT b.productcode, b.ProductDescription, a.AreaName, b.MinimumMonths, LAST_DAY(DATE_ADD(NOW(), INTERVAL b.MinimumMonths MONTH)) AS BestBefore FROM bestbeforedates b join area a on b.areaid = a.id;", conn))
{
da.Fill(dt);
var excelApp = new Excel.Application();
excelApp.Workbooks.Add();
Excel._Worksheet worksheet = (Excel.Worksheet)excelApp.ActiveSheet;
// Set all cells to text
worksheet.Cells.NumberFormat = "@";
worksheet.Cells[1, "A"] = "Product Code";
worksheet.Cells[1, "B"] = "Product Description";
worksheet.Cells[1, "C"] = "Area";
worksheet.Cells[1, "D"] = "Minimum Months";
worksheet.Cells[1, "E"] = "Best Before Date";
int headerRow = 1;
int startCol = 1;
int maxCol = 6;
for (int i = startCol; i < maxCol; i++)
{
Excel.Range currentRange = (Excel.Range)worksheet.Cells[headerRow, i];
currentRange.Font.Bold = true;
}
var row = 1;
foreach (DataRow allRow in dt.Rows)
{
row++;
worksheet.Cells[row, "A"] = allRow["ProductCode"];
worksheet.Cells[row, "B"] = allRow["ProductDescription"];
worksheet.Cells[row, "C"] = allRow["AreaName"];
worksheet.Cells[row, "D"] = allRow["MinimumMonths"];
worksheet.Cells[row, "E"] = allRow["BestBefore"];
worksheet.Columns.AutoFit();
}
Cursor.Current = Cursors.Default;
// Show excel app
excelApp.Visible = true;
}
}
Output
所需 Output
題
如果值相同,如何合並這些單元格?
編輯:
這是我到目前為止的地方..它沒有合並所需的單元格..但正在研究為什么不是。
var row = 1;
DataRow prevRow = dt.NewRow();
foreach (DataRow allRow in dt.Rows)
{
row++;
worksheet.Cells[row, "A"] = allRow["ProductCode"];
worksheet.Cells[row, "B"] = allRow["ProductDescription"];
worksheet.Cells[row, "C"] = allRow["AreaName"];
worksheet.Cells[row, "D"] = allRow["MinimumMonths"];
worksheet.Cells[row, "E"] = allRow["BestBefore"];
worksheet.Columns.AutoFit();
if(allRow["MinimumMonths"].ToString() == prevRow["MinimumMonths"].ToString())
{
worksheet.Range[worksheet.Cells[row, "D"], worksheet.Cells[row, "D"]].Merge();
}
else
{
}
prevRow = allRow;
}
請嘗試以下操作:
if (row > 2 && allRow["MinimumMonths"].ToString() == prevRow["MinimumMonths"].ToString())
{
worksheet.Range[worksheet.Cells[row - 1, "D"], worksheet.Cells[row, "D"]].Merge();
}
這是完整的代碼:
var row = 1;
DataRow prevRow = dt.NewRow();
foreach (DataRow allRow in dt.Rows)
{
row++;
worksheet.Cells[row, "A"] = allRow["ProductCode"];
worksheet.Cells[row, "B"] = allRow["ProductDescription"];
worksheet.Cells[row, "C"] = allRow["AreaName"];
worksheet.Cells[row, "D"] = allRow["MinimumMonths"];
worksheet.Cells[row, "E"] = allRow["BestBefore"];
worksheet.Columns.AutoFit();
if (row > 2 && allRow["MinimumMonths"].ToString() == prevRow["MinimumMonths"].ToString())
{
worksheet.Range[worksheet.Cells[row - 1, "D"], worksheet.Cells[row, "D"]].Merge();
}
//set value
prevRow = allRow;
}
如果您不需要使用 Excel,而只是需要創建一個 Excel 工作簿,您可能需要考慮使用DocumentFormat.OpenXml 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.