【发布时间】:2020-12-02 09:14:50
【问题描述】:
目标:
我的目标是合并特定列中具有相同值的单元格。
已经有将数据从 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;
}
}
输出
期望的输出
问题
如果值相同,如何合并这些单元格?
编辑:
这是我到目前为止的地方..它没有合并所需的单元格..但正在研究为什么不合并。
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;
}
【问题讨论】:
-
你累了什么?
-
` worksheet.Range[worksheet.Cells[row, "D"], worksheet.Cells[row, "D"]].Merge();` 范围没有意义,它只是同样,我建议只是自己测试合并,就像让语法正常工作,然后弄清楚如何动态合并