Board logo

标题: 介绍一种方便节省的打印病理切片标签的方法 [打印本页]

作者: 步行上班者    时间: 2014-5-9 10:54     标题: 介绍一种方便节省的打印病理切片标签的方法

介绍一种方便节省的打印病理切片标签的方法
密方元 黄伟 吴王飞 马邦磊 陈迅 李凤山
关键词 病理制片;HE染色;标签
最近,由我们病理科提出构思,要求,我院信息科研制了一套打印病理标签的程序,感到输入数据比较方便,标签纸又不浪费,现介绍如下:
1 材料与方法
1.1仪器和设备:计算机,彩色喷墨打印机,不干胶标签,整版不干胶标签与A4纸同样大小,每张8列,12行,共96张,由印刷厂印制。
2 方法
打标签步骤(打印整版连号)
2.1 点击桌面上的标签输入图标,显示页面(见照片1)
(照片1是电脑截图) /清空/在初始单元格(23格)输入编号 ,如201400001,然后将指针指向初始单元格右下脚的填充柄,指针变成+形状,拖动鼠标至目的单元格(118格),左击鼠标,以序列形式排序。
2.2 输入开始号1,  (输入1时标签不打小号)
2.3输入总数号1,(该例标本取材时蜡块总数是1个)
2.4点击 常规编码
2.5点击 左上角的保存
2.6点击 右上角X,回到桌面
2.7点击标签打印/EXCEL/确定/打印/打印/打印
(打印出来的标签见照片2)
实例打印
打印201400001到201400095
201400001取了10个蜡块,要10张标签,201400002取了9个,201400003取了8个,201400004取了7个,201400005取了6个,201400006取了5个,201400007取了4个,201400008取了3个,201400009取了2个,其余的标本都取了1个蜡块。
(1)标签输入/清空/编号201400001,一直往下拉到118号 (2).输入开始号”2,” 输入总数号,如该例标本取材时蜡块总数为10个,则输入10,如蜡块数是9个 ,则输入9,依次类推,如总数号为1则不输,点击”常规编码“可以直观显示打印的标签图象。
因为整版不干胶标签共96张不可能一次性刚好打完,为节约标签纸,避免浪费,下面的操作为节省标签纸而设计:
看一下”最后编码”,从119开始,拉到”最后编码”,然后输入开始号1,输入总数号1. 点击 “常规编码”,点击 左上角的”保存”点击 右上角”X”回到桌面,点击标签打印/EXCEL/确定/打印/打印/打印。
(打印出来的标签见照片3)

3  结果与讨论
   我们这次自行研制的打印病理标签的程序是在我科原打印病理标签程序的基础上建立起来的,改进了原程序的不足。打印的病理切片标签清晰醒目,字体整齐美观,与原打印程序比较,感到输入打印的整个流程比较方便,我科原来使用的打印程序,输入数据时较麻烦,每个编号需要计算后输入,每个标本取了几个蜡块,需要打印几张标签需要人工计算,将数据填入对应的标签空格,我们自行设计研制的这套打印程序,病理编号可以自动生成,每例标本需打印几张标签,只需在对应的病理编号后一次性输入一个数据即可,如需10个标签则输入10,需9个标签则输入9就可以了。另外标签纸又不浪费,故特向同行朋友介绍,供参考,以期抛砖引玉。
作者单位:南京市妇幼保健院病理科,南京 210014
作者简介:密方元,男,主管技师,黄伟,男,(信息科工程师 ),E-mail:13645156103@139.com
主要程序实现vb宏部分
Private Sub CommandButton1_Click()
Dim n As Integer, y As Integer, t As Integer
Dim Str1$, Str2$, Str3$
t = 23
Dim mystr(150) As String//定义字符串数组
n = 0
Do
While t < WorksheetFunction.CountA(Range("A23:A200")) + 23//定义编辑区域
y = Sheets("Sheet1").Range("B" & t).Value
If y = 0 Then
mystr(n) = ""
n = n + 1
ElseIf y > 0 Then//初始号大于0.循环产生编号
Do While y < Sheets("Sheet1").Range("C" & t).Value + 1
If y = 1 Then
Str1$ = Sheets("Sheet1").Range("A" & t).Value

Str3$ = Str1$
ElseIf y > 1 Then

Str1$ = Sheets("Sheet1").Range("A" & t).Value
Str2$ = y
Str3$ = Str1$ + Chr(10) + Chr(32) + Chr(32) + Chr(32) + Chr(32) + Chr(32) + Chr(32) + Chr(32) + Chr(32) + Chr(32) + Str2$//空格换行,产生小序号
End If
mystr(n) = Str3

n = n + 1
y = y + 1
Loop
End If
Sheets("Sheet1").Range("E"&t).Value= Sheets("Sheet1").Range("C"&t).Value-Sheets("Sheet1").Range("B" & t).Value + 1
Sheets("Sheet1").Range("E19").Value=96-Sheets("Sheet1").Range("E21").Value + 119 - 1
t = t + 1
Loop
Dim o, q, k As Integer
o = 1
k = 0
Do While o < 13
q = 1
Do While q < 9
Sheets("Sheet1").Cells(o, q) = mystr(k)//字符串数组循环加入上部预览区域
q = q + 1
k = k + 1
Loop
o = o + 1
Loop
End Sub

主要程序实现c#部分
private void printDocument1_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e)
        {



            int i; int j; int c = 0;
         
   
            XmlDocument xmlDoc1 = new XmlDocument();
            xmlDoc1.Load(System.Windows.Forms.Application.StartupPath + "\\printsettings.xml");//定义打印配置文件

            string Height = "";
            Height = xmlDoc1.SelectSingleNode("name/Height").InnerXml;
            double he = double.Parse(Height);
            string Width = "";
            Width = xmlDoc1.SelectSingleNode("name/Width").InnerXml;
            double wi = double.Parse(Width);
            string Margin = "";
            Margin = xmlDoc1.SelectSingleNode("name/Margin").InnerXml;
            double ma = double.Parse(Margin);
            string Left = "";

            Left = xmlDoc1.SelectSingleNode("name/Left").InnerXml;
            double le = double.Parse(Left);
            string Above = "";
            Above = xmlDoc1.SelectSingleNode("name/Above").InnerXml;
            double ab = double.Parse(Above);
            string Fon = "";
            Fon = xmlDoc1.SelectSingleNode("name/Font").InnerXml;
           
            string Size = "";
            Size = xmlDoc1.SelectSingleNode("name/Size").InnerXml;
            int x = Convert.ToInt32(Size);
         

         
            for (i = 0; i < 12; i++)
            {
                for (j = 0; j < 8; j++)
                {
  
                    double t = le + ma * (j * 2 + 1) + j * he;
                    float n=(float)t;
           
                    double r = ab+ ma * (i * 2 + 1) + i * wi;
                    float k = (float)r;
                    e.Graphics.DrawString(abc[c], new System.Drawing.Font(Fon, x, FontStyle.Bold), Brushes.Black, n, k);
                    c++;
                }
            }
        }
        private void button1_Click(object sender, EventArgs e)
        {
            printDialog1.ShowDialog();
            printPreviewDialog1.Document = this.printDocument1;
            printPreviewDialog1.ShowDialog();
           
            
        
    }


         [DllImport("User32.dll", CharSet = CharSet.Auto)]   
        public static extern int GetWindowThreadProcessId(IntPtr hwnd, out   int ID);   
        private void button2_Click(object sender, EventArgs e)
        {


            Microsoft.Office.Interop.Excel.Application ex = new Microsoft.Office.Interop.Excel.Application();
            Microsoft.Office.Interop.Excel.Workbook wb = ex.Application.Workbooks.Open(System.Windows.Forms.Application.StartupPath + "\\Book1.xls", Type.Missing);
            Microsoft.Office.Interop.Excel.Worksheet ws = (Microsoft.Office.Interop.Excel.Worksheet)wb.Sheets[1] as Microsoft.Office.Interop.Excel.Worksheet;

            try
            {

                int n = 0;
                int w, h;
                for (h = 1; h < 13; h++)
                    for (w = 1; w < 9; w++)
                    {
                        abc[n] = ((Range)ex.Cells[h, w]).Text.ToString();
                        n++;
                    }
                MessageBox.Show("数据同步成功|");//循环填充打印区域
            }
            catch
            { MessageBox.Show("数ºy据Y同ª?步?失º¡ì败㨹"); }
            IntPtr y = new IntPtr(ex.Hwnd);
            int z = 0;
            GetWindowThreadProcessId(y, out   z);
            System.Diagnostics.Process p = System.Diagnostics.Process.GetProcessById(z);
            p.Kill();




欢迎光临 中华病理技术论坛 (http://bbs.zhbljs.com/bbs/) Powered by Discuz! 6.0.0