您的位置:首页 > 其它

用EXCEL制作打印摸板

2009-03-11 09:38 211 查看
最近做了个打印摸板,主要实现思想是定义域名称来实现的.而不是去定义Value值,域名称包括普通域名和循环域名.

一. 定义域:简单的模板、复杂的模板都是通过定义域来实现的。
简单的模板定义域: DatatableName.Filed
循环数据的模板定义域:TABLE.DatatableName
分组定义域:DataGroup.Datatable

二.字段名称:模板布局的字段书写方式是:DatatableName.Filed

三.编程用数据库的值写到excel域名称所对应的Cell内。

具体讲解:
简单模板:选中excel一块区域,点击菜单:插入à名称à定义,在弹出的窗口中输入你需要定义的域名,例如定义字段名例如OP_JOB.JOB_NO。接下来,通过编程得到这个数据域,然后根据这个域名的后半部分得到需要放的是哪个表。然后把后台数据值替换excel的字段名称。
循环+分组:选中excel一块区域,点击菜单:插入à名称à定义,在弹出的窗口中输入循环域名,例如:TABLE.ls_warehouse_entrust,接下来在excel里定义需要显示的字段名域,例如:ls_warehouse_entrus.WAREHOUSE_IN_NO.。后台通过编程得到需要循环的数据表和需要显示的字段域名称。然后在后台编程处理。

/// <summary>
/// 编辑一个打印模板
/// </summary>
/// <param name="path"></param>
public void Edit(string filePath)
{
string oldFilePath = filePath;
filePath = Application.StartupPath + @"/Template/excelTmp.xlt";
if (filePath == "")
{
//UIFacade.MsgBox(SystemMessage.PLEASE_SELECT_DATA);//"请选择一个文件.");
return;
}
try
{
System.IO.File.Copy(oldFilePath, filePath,true);
Excel.ApplicationClass app = new Excel.ApplicationClass();
//实例化Excel对象
app.UserControl = false;

//加载excel 文件
Excel.WorkbookClass w = (Excel.WorkbookClass)app.Workbooks.Open(filePath, Missing.Value, Missing.Value, Missing.Value,
Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value,
Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value);

object missing = Type.Missing;

Excel.Workbook book = app.Workbooks.get_Item(1);

app.Visible = true;
app.DisplayAlerts = false;
book.SaveAs(oldFilePath, Excel.XlFileFormat.xlWorkbookNormal, Type.Missing, Type.Missing,
Type.Missing, Type.Missing, Excel.XlSaveAsAccessMode.xlExclusive, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing);
app.DisplayAlerts = true;
}
catch (Exception ex)
{
//UIFacade.MsgBox(ex.Message.ToString());
}
finally
{
}

}

/// <summary>
/// 打印预览
/// </summary>
/// <param name="excelPath"></param>
/// <param name="ds"></param>
public void PrintPreview(string excelPath, DataSet ds)
{
this.GetDataFromExc(excelPath, ds);
}

/// <summary>
///
/// </summary>
/// <param name="filePath"></param>
/// <param name="newFileName"></param>
/// <param name="ds"></param>
public void GetDataFromExc(string filePath, DataSet ds)
{
if (filePath == "")
{
//UIFacade.MsgBox(SystemMessage.PLEASE_SELECT_DATA);//"请选择一个文件.");

return;
}
try
{
this.ImportSwitch(filePath, ds);
}
catch (Exception ex)
{
//UIFacade.MsgBox(ex.Message.ToString());
}
finally
{
}
}

/// <summary>
/// 导入Excel
/// </summary>
/// <param name="filePath"></param>
private void ImportSwitch(string filePath, DataSet ds)
{
if (filePath == "")
{
//UIFacade.MsgBox(SystemMessage.PLEASE_SELECT_DATA);//"请选择一个文件.");
return;
}
Excel.ApplicationClass app = new Excel.ApplicationClass();
try
{
//实例化Excel对象
app.UserControl = false;

//加载excel 文件
Excel.WorkbookClass w = (Excel.WorkbookClass)app.Workbooks.Open(filePath, Missing.Value, true, Missing.Value,
Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value,
Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value);

object missing = Type.Missing;

Excel.Workbook book = app.Workbooks.get_Item(1);

//记录简单表名
string tbDataBind = "";
//记录循环表名
string dtDataRepeator = "";

//得到区域表t
Excel.Worksheet datasheet = (Excel.Worksheet)book.Worksheets[1];

if (datasheet == null)
{
//System.Resources.ResourceManager resources = new System.Resources.ResourceManager(RESOURCE_BASE_NAME, System.Reflection.Assembly.GetExecutingAssembly());
//string THERE_ARE_NOT_DESIGNATED_JOB = resources.GetString("THERE_ARE_NOT_DESIGNATED_JOB");
//UIFacade.MsgBox(THERE_ARE_NOT_DESIGNATED_JOB);//"没有指定工作表");
return;
}

int count = datasheet.Application.Names.Count;

Hashtable ht = new Hashtable();
for (int j = 1; j <= count; j++)
{
string s = datasheet.Application.Names.Item(j, Missing.Value, Missing.Value).Name;
if (s.ToUpper().Contains("TABLE.FIELD"))
{
object obj1 = datasheet.Application.Names.Item(j, Missing.Value, Missing.Value).RefersTo;
if (obj1 != null)
{
string strAire = obj1.ToString();
ht.Add(strAire, s);
}
}
}

for (int i = 1; i <= count; i++)
{
string s = datasheet.Application.Names.Item(i, Missing.Value, Missing.Value).Name;
if (!s.ToUpper().Contains("TABLE"))
{
string[] st = s.Split('.');
if (st != null && st.Length > 0)
{
tbDataBind = st[0].ToString();
if (ds.Tables.Contains(tbDataBind))
{
datasheet.Application.get_Range(s, Type.Missing).Value2 = ds.Tables[tbDataBind].Rows[0][st[1].ToString()].ToString();
}
}
}
else
{
string[] strTable = s.Split('.');
if (strTable != null && strTable.Length == 3 && s.Contains("FIELD"))
{
continue;
}
else
{
if (strTable.Length == 3)
{
dtDataRepeator = strTable[2].ToString();
}
else
{
dtDataRepeator = strTable[1].ToString();
}
//得到循环的区域
// rangeMODEL = datasheet.Application.Names.Item(i, Missing.Value, Missing.Value).RefersToRange;
object obj1 = datasheet.Application.Names.Item(i, Missing.Value, Missing.Value).RefersTo;

if (obj1 != null)
{
string strAire = obj1.ToString();
string frist = strAire.Substring(0, 9);
string str = strAire.Substring(9, strAire.Length - 9);
string[] str1 = str.Split(':');
string columnFrist = str1[0].ToString().Substring(0, 1);
string rowFrist = str1[0].ToString().Substring(2, str1[0].ToString().Length - 2);
string columnEnd = str1[1].ToString().Substring(1, 1);
string rowEnd = str1[1].ToString().Substring(3, str1[1].ToString().Length - 3);

int countZ = Convert.ToInt32(rowEnd) - Convert.ToInt32(rowFrist)+1;
int countLast = 0;
if (ds.Tables.Contains(dtDataRepeator))
{
//if (countZ > ds.Tables[dtDataRepeator].Rows.Count)
//{
// countLast = ds.Tables[dtDataRepeator].Rows.Count;
//}
//else
//{
// countLast = countZ;
//}
if (countZ > ds.Tables[dtDataRepeator].Rows.Count)
{
countLast = ds.Tables[dtDataRepeator].Rows.Count;
}
else
{
if (s.ToUpper().Contains("TABLE.INSERT"))
{
int insertCount = ds.Tables[dtDataRepeator].Rows.Count - countZ;
Excel.Range range = (Excel.Range)datasheet.Rows[rowEnd, Missing.Value];
for (int p = 0; p < insertCount; p++)
{
range.EntireRow.Insert(Excel.XlDirection.xlDown, Missing.Value);
}

countLast = ds.Tables[dtDataRepeator].Rows.Count;
}
else
{
countLast = countZ;
}
}
}
for (int z = 0; z < countLast; z++)
{
for (int q = 0; q < StringToInt(columnEnd) - StringToInt(columnFrist); q++)
{
string sheetcoumne = frist + IntToString(StringToInt(columnFrist) + q) + "$" + rowFrist;
string firstFiledName = GetFieldName(sheetcoumne, ht);
if (firstFiledName != "")
{
if (ds.Tables.Contains(dtDataRepeator))
{
if (ds.Tables[dtDataRepeator].Columns.Contains(firstFiledName))
{
datasheet.Cells[Convert.ToInt32(rowFrist) + z, StringToInt(columnFrist) + q] = ds.Tables[dtDataRepeator].Rows[z][firstFiledName].ToString();
}
}
}
}
}
}
}

}
}

app.Visible = true;
//book.SaveAs(newFileName, Excel.XlFileFormat.xlWorkbookNormal, Type.Missing, Type.Missing,
//Type.Missing, Type.Missing, Excel.XlSaveAsAccessMode.xlNoChange, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing);
System.GC.Collect();

//显示EXCEL
//System.Diagnostics.Process.Start(newFileName);

}
catch (Exception ex)
{
app.Workbooks.Close();
app.Application.Quit();
app.Quit();
System.Runtime.InteropServices.Marshal.ReleaseComObject((object)app);
System.GC.Collect();
}
finally
{
}

}

private string GetFieldName(string sheetSpace, Hashtable ht)
{
string result = "";
foreach (DictionaryEntry de in ht)
{
if (de.Value == null || de.Value.ToString() == "") { continue; }
if (de.Key.ToString() == sheetSpace)
{
string[] value = de.Value.ToString().Split('.');
result = value[2].ToString();
break;
}
}
return result;
}

private int StringToInt(string str)
{
int column = 0;
switch (str)
{
case "A": column = 1; break;
case "B": column = 2; break;
case "C": column = 3; break;
case "D": column = 4; break;
case "E": column = 5; break;
case "F": column = 6; break;
case "G": column = 7; break;
case "H": column = 8; break;
case "I": column = 9; break;
case "J": column = 10; break;
case "K": column = 11; break;
case "L": column = 12; break;
case "M": column = 13; break;
case "N": column = 14; break;
case "O": column = 15; break;
case "P": column = 16; break;
case "Q": column = 17; break;
case "R": column = 18; break;
case "S": column = 19; break;
case "T": column = 20; break;
case "U": column = 21; break;
case "V": column = 22; break;
case "W": column = 23; break;
case "X": column = 24; break;
case "Y": column = 25; break;
case "Z": column = 26; break;
}

return column;
}

private string IntToString(int i)
{
string column = "";
switch (i)
{
case 1: column = "A"; break;
case 2: column = "B"; break;
case 3: column = "C"; break;
case 4: column = "D"; break;
case 5: column = "E"; break;
case 6: column = "F"; break;
case 7: column = "G"; break;
case 8: column = "H"; break;
case 9: column = "I"; break;
case 10: column = "J"; break;
case 11: column = "K"; break;
case 12: column = "L"; break;
case 13: column = "M"; break;
case 14: column = "N"; break;
case 15: column = "O"; break;
case 16: column = "P"; break;
case 17: column = "Q"; break;
case 18: column = "R"; break;
case 19: column = "S"; break;
case 20: column = "T"; break;
case 21: column = "U"; break;
case 22: column = "V"; break;
case 23: column = "W"; break;
case 24: column = "X"; break;
case 25: column = "Y"; break;
case 26: column = "Z"; break;
}

return column;
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: