一、准备:想要操作Excel,先要在添加2个COM引用:

1、Microsoft Excel 14.0 Object Library (版本不同14.0也可能是12.0等)

2、Microsoft Office 14.0 Object Library

二、操作:

在Winform中,也须添加引用

using Microsoft.Office.Interop.Excel;

相应的,本类中原有的Datatable应改为System.Data.DataTable,否则将与Excel.Datatable冲突。

public partial class FrmExcelOp : Form
{
private Microsoft.Office.Interop.Excel.Application excel;  //定义一个变量供全局使用
object missing = System.Reflection.Missing.Value;    //定义一个参数变量供全局使用

}

        private void ExportIvoice()
{
#region 变量定义
Workbook wkBookTmpInvoice = null;
Workbook wkBookTag = null;
#endregion try
{
#region Excel准备阶段
if (!Directory.Exists(tagTempFolder))
{
Directory.CreateDirectory(tagTempFolder);
}
if (!Directory.Exists(tagFolder))
{
Directory.CreateDirectory(tagFolder);
} if (excel2 == null)
{
            //创建实例
excel2 = new Microsoft.Office.Interop.Excel.Application
{
UserControl = true
};
} if (excel2 == null)
{
MyMsg.Stop("无法打开EXCEL,请检查系统配置.");
return;
}           //...其它操作
wkBookTmp = excel2.Application.Workbooks.Open(tmpFileFullName, missing, true, missing, missing, missing, missing, missing, missing, true, missing, missing, missing, missing, missing);
          //可写/可编辑打开一个工作薄;
if (wkBookTmpInvoice == null)
{
MyMsg.Exclamation("开启文件失败,请检查!");
return;
}
for (int i = ; i <= wkBookTmp .Sheets.Count; i++)
{
Worksheet tmpSht = wkBookTmp .Sheets[i];
//添加上边线
tmpSht.Range["A13", "L13"].Borders.Item[XlBordersIndex.xlEdgeTop].LineStyle = XlLineStyle.xlContinuous;
//去除部分信息(给单元格赋值)
if (i < wkBookTmp .Sheets.Count) tmpSht.Range["A23", "A26"].Value2 = string.Empty;
}
          //新建一个工作簿,后面可以保存为文件
wkBookTag = excel2.Workbooks.Add();
if (wkBookTag != null)
{
string tInvSheetName = "INV01";
//给工作簿中的表重命名
((Worksheet)wkBookTmp .Sheets[]).Name = tInvSheetName;
            //将工作簿的表1拷贝一份插入到另一个工作簿的表1的前面
((Worksheet)wkBookTmp .Sheets[]).Copy(wkBookTag.Sheets[]); Worksheet tagSheet = wkBookTag.Sheets[tInvSheetName];
tagSheet.PageSetup.Zoom = false;
tagSheet.PageSetup.FitToPagesTall = false; //所有列调整为一页,与Excel的缩放设置对应,避免拆成2页打印
tagSheet.PageSetup.CenterHorizontally = true;//水平居中
tagSheet.PageSetup.PrintTitleRows = "$1:$12";//每页都打印的报表抬头
tagSheet.VPageBreaks.Add(tagSheet.Range["M1"]); //调整纵向分页符到最后一列 for (int r = ; r < ; r++)
{
tagSheet.Rows[r].RowHeight = ; //调整明细数据行高度
}
//部分复制其它数据表
for (int i = ; i <= wkBookTmp .Sheets.Count; i++)
{
int topPos = + * (i - );
int rightPos = + * (i - );
tagSheet.Range["A" + topPos].PageBreak = ;//在某行上方插入横向分页符             //删除默认的工作表
wkBookTag.Sheets["Sheet1"].Delete();
wkBookTag.Sheets["Sheet2"].Delete();
wkBookTag.Sheets["Sheet3"].Delete();
}
#endregion          //............ //以16行为复制行,在后面批量插入15行(相当于在Excel中复制16行,再选中17后面的15行,再右键-》插入复制的行)
tagSheetPL.Rows["17:32"].Insert(XlDirection.xlDown, tagSheetPL.Rows[""].Copy());           //...... #region 结尾清理及更新操作日志
//保存并关闭完成所有操作的目标文件(xlOpenXMLWorkbook为.xlsx后缀,如果要.xls后缀,需要设置为xlOpenNormal
wkBookTag.SaveAs(tagFileFullName, XlFileFormat.xlOpenXMLWorkbook);
wkBookTag.Close(false);
wkBookTag = null;
//以下放在保存之后再关闭
wkBookTmpInvoice.Close(false);//不保存关闭
wkBookTmpInvoice = null;
File.Delete(tmpInvoiceFullName);//删除临时文件
}
catch (Exception ex)
{
if (wkBookTag != null) wkBookTag.Close();
if (wkBookTmpInvoice != null)
{
wkBookTmpInvoice.Close(false);//不保存关闭
File.Delete(tmpInvoiceFullName);//删除临时文件
}
}
finally
{ }
}
                                //插入字符,指定字体
if (!string.IsNullOrEmpty(MXRmk))
{
var objTextBox = wkSheet.Shapes.AddTextbox(Microsoft.Office.Core.MsoTextOrientation.msoTextOrientationHorizontal,uleft,utop, , );
objTextBox.Name = "TextBox1"; //这行必须的。它直接影响下一行。
//objTextBox.Fill.Visible = 0;
objTextBox.Line.Weight = ;
objTextBox.Line.ForeColor.RGB = Color.Black.ToArgb();
objTextBox.TextFrame2.TextRange.Characters.Text="【"+ MXRmk +"】";
objTextBox.TextFrame2.TextRange.Characters.Font.Size = ;
objTextBox.TextFrame2.TextRange.Characters.Font.Bold = Microsoft.Office.Core.MsoTriState.msoCTrue;
}

插入字符

                                            //指定位置为A2处
float aleft = (float)partnoBarRange.Left+;
float atop = (float)partnoBarRange.Top;
float aheight = (float)partnoBarRange.Height; wkSheet.Shapes.AddPicture(tmpFN, Microsoft.Office.Core.MsoTriState.msoFalse, Microsoft.Office.Core.MsoTriState.msoTrue, aleft, atop, , aheight-);

插入二维码图片

                                    if (chkPreviewFirst.Checked)
{
excelPrint.Visible = true;
wkSheet.PrintPreview(false);
}
else
{
excelPrint.Visible = false;
wkSheet.PrintOutEx();
}

打印预览与直接打印

。。。

最新文章

  1. 用 ElementTree 在 Python 中解析 XML
  2. Redis学习总结(1)——数据持久化
  3. easymock所测试的方法内部新NEW对象的处理
  4. &quot;$cond&quot;
  5. poj 1950 Dessert(dfs枚举,模拟运算过程)
  6. 第十一章:Android数据存储(上)
  7. Android 动态Tab分页效果实现
  8. CodeIgniter API
  9. SQL Server使用WITH AS递归查找
  10. 1.23 确定一个Decimal或Double的整数部分
  11. vedio_note2
  12. php之冒泡排序
  13. 路径规划算法之Bellman-Ford算法
  14. Oracle XDB组件重建说明
  15. 处理JavaScript异常的正确姿势
  16. python 的排名,已经python的简单介绍
  17. Python 全集变量
  18. python+selenium—webdriver入门(一)
  19. Hibernate or JPA Annotation中BLOB、CLOB注解写法
  20. C#让应用程序只运行一个实例的几种方法

热门文章

  1. Java和C#中的自定义元数据
  2. 恒创科技 基于openStack云主机
  3. Win8.1(64bit) Hyper-V 安装Ubuntu 14.04LTS(64 bit)
  4. linux下FTP使用
  5. Spring Cloud Eureka 1(eureka简介)
  6. 生成ssl脚本文件
  7. C# AOP实现
  8. java Web 过滤器Filter详解
  9. 18-printf(*)的输出格式
  10. Solidity 合约调用合约