private void isHaveA2Comment()
{
string file = templateTree.SelectedNode.Tag.ToString();//得到路径
Excel.Range rngA2;
workbook = ExcelEngine.Current.GetWorkbook(file);//得到workBook
Worksheet worksheet = (Excel.Worksheet)workbook.Worksheets[1];
rngA2 = worksheet.get_Range("A2", Missing.Value);
if (rngA2.Comment == null)//如果sheet1的rngA2为空,则给每个sheet的A2加上批注
{
for (int i = 1; i < workbook.Worksheets.Count + 1; i++)
{
worksheet = (Worksheet)workbook.Sheets[i];
string worksheetName = worksheet.Name.ToString();
rngA2 = worksheet.get_Range("A2", Missing.Value);
if (...)
{
rngA2.AddComment("1,unitId");
}
else if (...)
{
rngA2.AddComment("2,rows");
}
else if (...)
{
rngA2.AddComment("3,rows");
}
else
{
rngA2.AddComment("0,");
}
}
workbook.Close(true, Missing.Value, Missing.Value);
//workbook.Save();
}
}
{
string file = templateTree.SelectedNode.Tag.ToString();//得到路径
Excel.Range rngA2;
workbook = ExcelEngine.Current.GetWorkbook(file);//得到workBook
Worksheet worksheet = (Excel.Worksheet)workbook.Worksheets[1];
rngA2 = worksheet.get_Range("A2", Missing.Value);
if (rngA2.Comment == null)//如果sheet1的rngA2为空,则给每个sheet的A2加上批注
{
for (int i = 1; i < workbook.Worksheets.Count + 1; i++)
{
worksheet = (Worksheet)workbook.Sheets[i];
string worksheetName = worksheet.Name.ToString();
rngA2 = worksheet.get_Range("A2", Missing.Value);
if (...)
{
rngA2.AddComment("1,unitId");
}
else if (...)
{
rngA2.AddComment("2,rows");
}
else if (...)
{
rngA2.AddComment("3,rows");
}
else
{
rngA2.AddComment("0,");
}
}
workbook.Close(true, Missing.Value, Missing.Value);
//workbook.Save();
}
}
解决方案 »
- C# 中线程,StringBuilder,以及OdbcDataReader中的问题
- 问个不专业C#的问题,居然在网上都找不到同样的。。
- adapter.Update更新问题,为什么不能连续更新呢?
- 屏蔽 csdn 里面的“社区焦点”
- int icdev=IC.auto_int(0,9600)这句报外部组件发生异常
- 如何在word文档中指定位置输入字符串?
- C# NET 打印中纸型设置问题 十分着急!!!
- 问一个函数定义的简单问题,谢谢
- c#中的数据适配器dataadapter不支持事务transaction,怎么办???
- 关于水晶报表和dataGrid的问题
- GRIDVIEW的模板里控件的事件问题
- 关于Gridview控件的简单问题!
退出之后,在WINDOWS资源管理器里也不存在未释放的EXCEL进程.
但是就是打开不了我的EXCEL的模板文件.打开就抱错,叫我恢复......请教各位高手.
十分感谢
excelApp.Quit();
会不会是 保存 的方式 出错了扼
//保存方式一:保存WorkBook
//workbook.SaveAs(@"F:\CData.xls",
// Missing.Value,Missing.Value,Missing.Value,Missing.Value,Missing.Value,
// Microsoft.Office.Interop.Excel.XlSaveAsAccessMode.xlNoChange,Missing.Value,Missing.Value,Missing.Value,
// Missing.Value,Missing.Value); //保存方式二:保存WorkSheet
// worksheet.SaveAs(@"F:\CData2.xls",
// Missing.Value, Missing.Value, Missing.Value, Missing.Value,
// Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value); ////保存方式三
//workbook.Saved = true;
//workbook.SaveCopyAs(sfd.FileName);
System.Runtime.InteropServices.Marshal.ReleaseComObject(worksheet);
worksheet = null;
System.Runtime.InteropServices.Marshal.ReleaseComObject(workbook);
workbook = null;
workbooks.Close();
System.Runtime.InteropServices.Marshal.ReleaseComObject(workbooks);
workbooks = null;
excelApp.Quit();
System.Runtime.InteropServices.Marshal.ReleaseComObject(excelApp);
excelApp = null;
MessageBox.Show("导出Excel完成!");
}
}
没有的话,就是你代码 的问题 。
/// 导出数据到Excel+backgroundWorker1
/// </summary>
/// <param name="TasksData">数据源</param>
/// <param name="HeadName">显示标题的集合</param>
/// <param name="ColumnName">显示的列的结合</param>
/// <param name="WorkBookName">工作表的名字</param>
/// <param name="FileName">保存Excel文件的名字</param>
public void ExportTasks(DataSet TasksData, ArrayList heads, ArrayList columns, string WorkBookName, string FileName)
{
// 定义要使用的Excel 组件接口
// 定义Application 对象,此对象表示整个Excel 程序
Microsoft.Office.Interop.Excel.Application excelApp = null;
// 定义Workbook对象,此对象代表工作薄
Microsoft.Office.Interop.Excel.Workbook workBook;
// 定义Worksheet 对象,此对象表示Execel 中的一张工作表
Microsoft.Office.Interop.Excel.Worksheet ws = null;
//定义Range对象,此对象代表单元格区域
// Microsoft.Office.Interop.Excel.Range r; int row = 1; int cell = 1;
int dcell = 1;
try
{
//初始化 Application 对象 excelApp
excelApp = new Microsoft.Office.Interop.Excel.Application();
//在工作薄的第一个工作表上创建任务列表
workBook = excelApp.Workbooks.Add(XlWBATemplate.xlWBATWorksheet);
ws = (Worksheet)workBook.Worksheets[1]; // 命名工作表的名称为
ws.Name = WorkBookName;
//创建标题
for (int headindex = 0, headcount = heads.Count; headindex < headcount; headindex++)
{
ws.Cells[row, cell] = heads[headindex].ToString();
//设置Excel 标题样式
//Range rghead = r = (Range)ws.get_Range(ws.Cells[row, cell], ws.Cells[row, cell]);
//rghead.EntireColumn.Font.Bold = true;
//rghead.EntireColumn.Font.Size = 14;
//rghead.EntireColumn.Font.ColorIndex = 3;
//rghead.EntireColumn.HorizontalAlignment = XlHAlign.xlHAlignLeft;
//rghead.EntireColumn.AutoFit(); cell++;
} // 创建行,把数据视图记录输出到对应的Excel 单元格
for (int i = 0, rowcount = TasksData.Tables[0].Rows.Count; i < rowcount; i++)
{
dcell = 1;
for (int k = 0, columnNamecount = columns.Count; k < columnNamecount; k++)
{
for (int j = 0, columncount = TasksData.Tables[0].Columns.Count; j < columncount; j++)
{
if (TasksData.Tables[0].Columns[j].ColumnName==columns[k].ToString())
{
ws.Cells[i + 2, dcell] = TasksData.Tables[0].Rows[i][j].ToString() + "\r"; Range rg = (Range)ws.get_Range(ws.Cells[i + 2, dcell], ws.Cells[i + 2, dcell]);
//设置为文本格式
if (TasksData.Tables[0].Rows[i][j].GetType().Name == "DateTime")
{
rg.NumberFormat = "yyyy-MM-dd HH:mm:ss";
}
else
{
rg.NumberFormatLocal = "@";
}
rg.EntireColumn.AutoFit();
dcell++;
break;
}
}
}
// }
} //显示 Excel
//excelApp.Visible = true;
// 或者直接保存
workBook.Saved = true;
workBook.SaveCopyAs(FileName);
ws = null;
workBook = null;
excelApp = null; }
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
}
//页面调用
//private void button1_Click(object sender, EventArgs e)
//{
// backgroundWorker1.RunWorkerAsync();
//} //private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
//{
// Print p = new Print();
// p.ExportTasks(ds, "客户编号,员工编号,船名字", "CustomerID,EmployeeID,OrderDate", "s", "e:\\1.XLS");
//} //private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
//{
// MessageBox.Show("数据导出成功!");
//}
}
}
}
但是程序全部推出之后自然调用这个QUIT().
退出之后,我的WINDOW资源管理器里并没有EXCEL进程.
但是就是所操作的EXCEL文件打不开.总是报错.
但是用程序读,程序写这个模板文件,都没有任何问题.
OFFICE是肯定没有问题的.
打开其他的EXCEL,并进行操作,比如新建立一个项目,完全COPY上面代码
可以在EXCEL里面的SHEET全部加上COMMENT,
但是就是我的在项目里面的这些代码不顶事.实在是烦恼啊
试下这个人家做好的EXECL的DLL工具。。
方法里面也写了。。方便多了。。