C#往现有Excel插入一个Sheet并导入DataTable
今天遇到一个需求,需要在第一个excel导出后,再在导出的excel中新增一个sheet工作表,再将一个datatable插入到新增的sheet表中,我的思路是先打开导出的excel然后插入一个sheet,再将datatable插入到sheet中就可以了。
说是这样说,然后在实现时遇到了点问题,打开已存在的excel并插入sheet后会把之前的删除掉,然后在网上搜了一下实现方法,最后经过几篇文章的综合参考,最终实现了这个功能,现在代码贴上。
代码实例:
/// <summary>
/// 向现有表格中新增一个Sheet2,并导入DataTable
/// </summary>
/// <param name="Path"></param>
/// <param name="dt"></param>
public void AddSheet(string Path, DataTable dt)
{
var SlDoc = new SLDocument(Path);
SlDoc.AddWorksheet("OrderInfo");//添加新的sheet
AddData(SlDoc, dt);//填充数据
SlDoc.SaveAs(Path);
}
/// <summary>
/// 把Datatable数据填充到新工作区
/// </summary>
/// <param name="SlDoc"></param>
/// <param name="dt"></param>
public void AddData(SLDocument SlDoc, DataTable dt)//针对Excel的每列进行塞数据
{
var strCell = GetHeaderLetters((uint)dt.Columns.Count);
for (int j = 0; j < dt.Columns.Count; j++)
{
SlDoc.SetCellValue(strCell[j] + 1, dt.Columns[j].ToString());//先塞列名
}
if (dt != null && dt.Rows.Count > 0)
{
//按行进行对Excel塞查出的Table中数据
for (int j = 0; j < dt.Rows.Count; j++)
{
for (int i = 0; i < strCell.Length; i++)
SlDoc.SetCellValue(strCell[i] + (j + 2), dt.Rows[j][i].ToString());
}
}
}
/// <summary>
/// 生成excel工作表列头(A\B\C\D\E\F.....AA\AB\AC...)
/// </summary>
/// <param name="max"></param>
/// <returns></returns>
public static string[] GetHeaderLetters(uint max)
{
var result = new List<string>();
int i = 0;
var columnPrefix = new Queue<string>();
string prefix = null;
int prevRoundNo = 0;
uint maxPrefix = max / 26;
while (i < max)
{
int roundNo = i / 26;
if (prevRoundNo < roundNo)
{
prefix = columnPrefix.Dequeue();
prevRoundNo = roundNo;
}
string item = prefix + ((char)(65 + (i % 26))).ToString(CultureInfo.InvariantCulture);
if (i <= maxPrefix)
{
columnPrefix.Enqueue(item);
}
result.Add(item);
i++;
}
return result.ToArray();
}
案例截图:
版权声明:
作者:兴兴
文章:C#往现有Excel插入一个Sheet并导入DataTable
链接:https://www.networkcabin.com/notes/2690
文章版权归本站所有,未经授权请勿转载。
作者:兴兴
文章:C#往现有Excel插入一个Sheet并导入DataTable
链接:https://www.networkcabin.com/notes/2690
文章版权归本站所有,未经授权请勿转载。
THE END