Visual C# 操作 Excel 文件(四) 存檔及其他操作

简化Excel操作
本文介绍了一个简化Excel文件操作的封装类,包括保存文件、切换工作表、复制与删除工作表等功能,并提供了设置单元格公式的简便方法。
不管對 Excel 填入資料或插入圖片,最後總是得保存起來,而保存檔案的方式則是使用 SaveAs() 方法:

public virtual void SaveAs (
   [OptionalAttribute] Object Filename,
 
  [OptionalAttribute] Object FileFormat,
 
  [OptionalAttribute] Object Password,
 
  [OptionalAttribute] Object WriteResPassword,
 
  [OptionalAttribute] Object ReadOnlyRecommended,
 
  [OptionalAttribute] Object CreateBackup,
 
  [OptionalAttribute] XlSaveAsAccessMode AccessMode,
 
  [OptionalAttribute] Object ConflictResolution,
 
  [OptionalAttribute] Object AddToMru,
 
  [OptionalAttribute] Object TextCodepage,
 
  [OptionalAttribute] Object TextVisualLayout,
 
  [OptionalAttribute] Object Local
)

這麼多的參數,除了少數幾個之外,基本上都用不到,所以在 MyExcel 中新增了一個 Save()方法,只保留一個檔名的參數,省去一些麻煩。

public void Save(string szFile)
{
 
  try
 
  {
 
     m_aWB.SaveAs(szFile, missing, missing, missing, missing,missing,
 
                  Excel.XlSaveAsAccessMode.xlNoChange, missing, missing,
 
                  missing, missing, missing);
 
  }
 
  catch (Exception e)
 
  {
 
     System.Windows.Forms.MessageBox.Show(e.Message, szFile);
 
     throw e;
 
  }
}

在我自己的應用中,我還會對 Worksheet 做切換、新增、刪除的動作,所以在 MyExcel 中也增加了相對應的方法:

public void SetSheets(int no)
{
 
   m_aSheet =(Excel.Worksheet)m_aWB.Sheets.get_Item(no);
}

public void SetSheets(string szName)
{
 
   m_aSheet = (Excel.Worksheet)m_aWB.Sheets.Item[szName.Trim()];
}

/// 複製一個指定的 Worksheet,並插入在其前面。
/// szSrcName: 要複製的 Worksheet 名稱。
/// szNewName: 新增的 Worksheet 名稱。
public void CopySheet(string szSrcName, string szNewName)
{
 
   Excel.Worksheet aSheet;
 
   
 
   aSheet =(Excel.Worksheet)m_aWB.Sheets.Item[szSrcName.Trim()];
 
   aSheet.Copy(aSheet, Type.Missing);

 
   aSheet =(Excel.Worksheet)m_aWB.Sheets.Item[szSrcName.Trim() + "(2)"];
 
   aSheet.Name= szNewName;
}

/// 刪除一個 Worksheet。
public void RemoveSheet(string szName)
{
 
   Excel.Worksheet aSheet =(Excel.Worksheet)m_aWB.Sheets.Item[szName.Trim()];
 
   aSheet.Delete();
}

/// 設定單元格公式。
public void SetFormula(int col, int row, string szValue)
{
 
   Excel.Range oRange = (Excel.Range)m_aSheet.Cells[row, col];
 
   oRange.Formula = szValue;
}
public void SetFormula(string szRangeName, string szValue)
{
 
   Excel.Range oRange = m_aSheet.get_Range(szRangeName, missing);
 
   oRange.Formula = szValue;
}

/// 將給定的 col, row 值轉換成 RangeName。
public string GetRangeName(Int32 nCol, Int32 nRow)
{
 
   string buf ="";

 
   if (nCol< 27)
 
     buf = Convert.ToChar(64 + nCol).ToString();
 
   else
 
   {
 
     int i = (nCol - 1) / 26;
 
     int j = (nCol - 1) % 26;
 
     buf = Convert.ToChar(64 + i).ToString() +
 
           Convert.ToChar(65 + j).ToString();
 
   }
 
   return buf +nRow.ToString();
}

/// 將給定的 RangeName 轉換成 Col, Row 值。
public void RangeNameToColRow(string szRangeName, ref int nCol, refint nRow)
{
 
   string buf =szRangeName.Substring(1, 1).ToUpper();
 
   int i =(int)(char.Parse(buf));
 
   if (i>= 48 && i<= 57)
 
   {
 
      i = (int)(char.Parse(szRangeName.Substring(0, 1).ToUpper()));
 
      nCol = i - 64;
 
      nRow = int.Parse(szRangeName.Substring(1, szRangeName.Length -1));
 
   }
 
   else
 
   {
 
      i = (int)(char.Parse(szRangeName.Substring(0, 1).ToUpper()));
 
      nCol = i - 64;
 
      i = (int)(char.Parse(szRangeName.Substring(1, 1).ToUpper()));
 
      nCol = nCol * 26 + i - 64;
 
      nRow = int.Parse(szRangeName.Substring(2, szRangeName.Length -2));
 
   }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值