excel操作
/// <summary>
///
/// </summary>
/// <param name="excleName">文件名</param>
/// <param name="columnNames">各个sheet表的列名,当count为一时,所有sheet表使用相同的列名</param>
/// <param name="dataValues">各个sheet表的数据</param>
/// <returns></returns>
public string ExportExcel(string excleName, List<List<string>> columnNames, Dictionary<string, List<List<string>>> dataValues)
{
if (columnNames.Count != dataValues.Count && columnNames.Count != 1) {
return "";
}
var app = new Application();
var workBook = app.Workbooks.Add(true);
try {
app.Visible = false;
app.DisplayAlerts = false;
FillDate(workBook, columnNames, dataValues);
//第一张表没有使用,删掉
workBook.Worksheets["sheet1"].Delete();
string fileName = string.Format("{0}{1}", excleName, ".xlsx");
string baseDirectory = SystemInfo.BaseDirectory;
string relativeFullName = SystemInfo.TempDirectory + fileName;
string fullName = Path.Combine(baseDirectory, relativeFullName);
if (!Directory.Exists(Path.GetDirectoryName(fullName))) {
Directory.CreateDirectory(Path.GetDirectoryName(fullName));
}
if (File.Exists(fullName)) {
File.Delete(fullName);
}
workBook.SaveAs(fullName);
return relativeFullName;
} catch (Exception) {
return string.Empty;
} finally {
workBook.Close();
app.Quit();
app = null;
}
}
/// <summary>
/// 填充文件
/// </summary>
/// <param name="workBook"></param>
/// <param name="columnNames">列名可用一个</param>
/// <param name="rowDates"></param>
private void FillDate(Workbook workBook, List<List<string>> columnNames, Dictionary<string, List<List<string>>> rowDates)
{
for (int i = 0; i < rowDates.Count; i++) {
var workSheet = (Worksheet)workBook.Worksheets.Add(Type.Missing, workBook.Worksheets[workBook.Worksheets.Count], Type.Missing, Type.Missing);
if (columnNames.Count == 1) {
FillOneSheet(workSheet, rowDates.Keys.ElementAt(i), columnNames[0], rowDates.Values.ElementAt(i));
} else {
FillOneSheet(workSheet, rowDates.Keys.ElementAt(i), columnNames[0], rowDates.Values.ElementAt(i));
}
}
}
/// <summary>
/// 填充一张sheet表
/// </summary>
/// <param name="workSheet">sheet名称</param>
/// <param name="sheetName">列名</param>
/// <param name="columnNames">数据</param>
/// <param name="rowDatas"></param>
private void FillOneSheet(Worksheet workSheet, string sheetName, List<string> columnNames, List<List<string>> rowDatas)
{
//sheet名称
workSheet.Name = sheetName;
//列名
for (int i = 0; i < columnNames.Count; i++) {
workSheet.Cells[1, i + 1] = columnNames[i];
}
//数据
for (int rowNum = 0; rowNum < rowDatas.Count; rowNum++) {
for (int columnNum = 0; columnNum < rowDatas[rowNum].Count; columnNum++) {
workSheet.Cells[rowNum + 2, columnNum + 1] = rowDatas[rowNum][columnNum];
}
}
//控制格式
workSheet.Cells.HorizontalAlignment = XlVAlign.xlVAlignCenter;
workSheet.Cells.VerticalAlignment = XlVAlign.xlVAlignCenter;
workSheet.Columns.EntireColumn.AutoFit();
}
2. http://hi.baidu.com/brightsea/item/7f3b54da476c8819d68ed07c。
快速导出Excel。一次给Excel的区域赋值,和一个单元格的赋值,速度不是一个级别上的。
workSheet.Range["A1", workSheet.Cells[data.GetLength(0), data.GetLength(1)]].Value2 = data;
data需要是一个二维数组
浙公网安备 33010602011771号