不管對 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));
}
}
public virtual void SaveAs (
)
這麼多的參數,除了少數幾個之外,基本上都用不到,所以在 MyExcel 中新增了一個 Save()方法,只保留一個檔名的參數,省去一些麻煩。
public void Save(string szFile)
{
}
在我自己的應用中,我還會對 Worksheet 做切換、新增、刪除的動作,所以在 MyExcel 中也增加了相對應的方法:
public void SetSheets(int no)
{
}
public void SetSheets(string szName)
{
}
/// 複製一個指定的 Worksheet,並插入在其前面。
/// szSrcName: 要複製的 Worksheet 名稱。
/// szNewName: 新增的 Worksheet 名稱。
public void CopySheet(string szSrcName, string szNewName)
{
}
/// 刪除一個 Worksheet。
public void RemoveSheet(string szName)
{
}
/// 設定單元格公式。
public void SetFormula(int col, int row, string szValue)
{
}
public void SetFormula(string szRangeName, string szValue)
{
}
/// 將給定的 col, row 值轉換成 RangeName。
public string GetRangeName(Int32 nCol, Int32 nRow)
{
}
/// 將給定的 RangeName 轉換成 Col, Row 值。
public void RangeNameToColRow(string szRangeName, ref int nCol, refint nRow)
{
}