置顶随笔

//有保存对话框

public void dgvToExcel(System.Windows.Forms.DataGridView datagridview, string SheetName)
        {
            
int iRows = 0;
            
int iCols = 0;
            
int iTrueCols = 0;
            Microsoft.Office.Interop.Excel.Application app 
= new Microsoft.Office.Interop.Excel.Application();
            Microsoft.Office.Interop.Excel.Workbook wb 
= app.Workbooks.Add(System.Reflection.Missing.Value);
            Microsoft.Office.Interop.Excel.Worksheet ws 
= null;

            
if (wb.Worksheets.Count > 0)
            {
                ws 
= (Microsoft.Office.Interop.Excel.Worksheet)wb.Worksheets.get_Item(1);
            }
            
else
            {
                wb.Worksheets.Add(System.Reflection.Missing.Value, System.Reflection.Missing.Value, System.Reflection.Missing.Value, System.Reflection.Missing.Value);
                ws 
= (Microsoft.Office.Interop.Excel.Worksheet)wb.Worksheets.get_Item(1);
            }
            
if (ws != null)
            {
                
if (SheetName.Trim() != "")
                {
                    ws.Name 
= SheetName;
                }
                iRows 
= datagridview.Rows.Count;      //加上列头行
                iTrueCols = datagridview.Columns.Count;   //包含隐藏的列,一共有多少列
                
//求列数,省略Visible = false的列
                for (int i = 0; i < datagridview.Columns.Count; i++)
                {
                    
if (datagridview.Columns[i].Visible) iCols++;
                }
                
string[,] dimArray = new string[iRows + 1, iCols];
                
for (int j = 0, k = 0; j < iTrueCols; j++)
                {
                    
//省略Visible = false的列
                    if (datagridview.Columns[j].Visible)
                    {
                        dimArray[
0, k] = datagridview.Columns[j].HeaderText;
                        k
++;
                    }
                }
                
for (int i = 0; i < iRows; i++)
                {
                    
for (int j = 0, k = 0; j < iTrueCols; j++)
                    {
                        
//省略Visible = false的列
                        if (datagridview.Columns[j].Visible)
                        {
                            
if (datagridview.Rows[i].Cells[j].Value != null)
                            {
                                dimArray[i 
+ 1, k] = datagridview.Rows[i].Cells[j].Value.ToString();
                            }
                            
else
                            {
                                dimArray[i 
+ 1, k] = "";
                            }
                            k
++;
                        }
                    }
                }
                ws.get_Range(ws.Cells[
11], ws.Cells[iRows + 1, iCols]).Value2 = dimArray;
                ws.get_Range(ws.Cells[
11], ws.Cells[1, iCols]).Font.Bold = true;
                ws.get_Range(ws.Cells[
11], ws.Cells[iRows + 1, iCols]).Font.Size = 10.0;
                ws.get_Range(ws.Cells[
11], ws.Cells[iRows + 1, iCols]).RowHeight = 14.25;
                
//ws.Columns[.ColumnWidth = datagridview.Columns[0].Width;
                for (int j = 0, k = 0; j < iTrueCols; j++)
                {
                    
//省略Visible = false的列
                    if (datagridview.Columns[j].Visible)
                    {
                        ws.get_Range(ws.Cells[
1, k + 1], ws.Cells[1, k + 1]).ColumnWidth = (datagridview.Columns[j].Width / 8.4> 255 ? 255 : (datagridview.Columns[j].Width / 8.4);
                        
//ws.Columns.c = datagridview.Columns[j].Width;
                        k++;
                    }
                }
            }
            app.Visible 
= true;
        }
posted @ 2009-06-17 19:53 小末鱼 阅读(1738) | 评论 (0)编辑 收藏

2009年6月28日

 

关键字: J2ME,C#,Mobile,Wireless
J2ME美好的write once,run anywhere的初衷,被各大手机厂商摧残的体无完肤,变成write once,debug everywhere(或者write once, port everywhere)。
在经历了2,3年头脑火热期后,J2ME developers终于意识到一个统一的J2ME JVM implementation的重要性。貌似IBM开始了一个J2ME标准制订的委员会,Sun也开始开源J2ME,希望不久的将来J2ME可以更加规范些。但各大手机厂商的态度很重要。看过太多的厂商口口声声说支持xxJSR标准,开放xx底层API,手机拿到手一看傻眼,JSR标准只支持一半,基本上无用。底层API只开放给自己的软件用,其它人开放的程序,对不起,没有permission。很多优秀的JSR,如PIM,MMS,等等,基本于我们无缘。模拟器里玩得很高潮,实际手机上一试,基本嗝屁!

SavaJe给了J2ME一线希望。SavaJe是直接的Java OS,而不是寄存于手机kernel OS上的一层JVM layer。在今年的JavaOne上大出风头。native执行J2ME程序的速度很快,也很酷。可惜没有得到大手机厂商的支持,月前据说烧了1个多亿的钱,目前运转有困难,融资又融不到,前景叵测。可惜。

Windows C#Compact Framework倒不同。只是因为MS垄断,但看起来至少在mobile方面,这个垄断挺好。
Windows Mobile (以下简称WM)在企业级的应用上,和MS的几个龙头产品的整合非常好。特别是outlook的整合,很受商业人士的青睐。他们最关切的不是技术上的优势和技术的领先程度,他们关心的是技术是否很好的为他们的商业发展服务。他们才不管MS的垄断与否。事实上,他们更希望一个统一的开发平台,所有的程序和数据可以很方便的整合。(虽然我是anti-MS,但他们商业应用上的优势不可否认)。WM上的POOM(Pocket Outlook Object Model)很好的结合了Outlook中基本(但很重要的)功能。另外一个摄像头的API,可以很方便的拍照片,视频聊天,拍video等等,开发者不需要写low level的摄像头驱动程序(J2ME这点做得很不够),直接调用摄像头API的功能,可以更专注于商业逻辑的开发。
posted @ 2009-06-28 15:59 小末鱼 阅读(231) | 评论 (1)编辑 收藏

2009年6月17日

//有保存对话框

public void dgvToExcel(System.Windows.Forms.DataGridView datagridview, string SheetName)
        {
            
int iRows = 0;
            
int iCols = 0;
            
int iTrueCols = 0;
            Microsoft.Office.Interop.Excel.Application app 
= new Microsoft.Office.Interop.Excel.Application();
            Microsoft.Office.Interop.Excel.Workbook wb 
= app.Workbooks.Add(System.Reflection.Missing.Value);
            Microsoft.Office.Interop.Excel.Worksheet ws 
= null;

            
if (wb.Worksheets.Count > 0)
            {
                ws 
= (Microsoft.Office.Interop.Excel.Worksheet)wb.Worksheets.get_Item(1);
            }
            
else
            {
                wb.Worksheets.Add(System.Reflection.Missing.Value, System.Reflection.Missing.Value, System.Reflection.Missing.Value, System.Reflection.Missing.Value);
                ws 
= (Microsoft.Office.Interop.Excel.Worksheet)wb.Worksheets.get_Item(1);
            }
            
if (ws != null)
            {
                
if (SheetName.Trim() != "")
                {
                    ws.Name 
= SheetName;
                }
                iRows 
= datagridview.Rows.Count;      //加上列头行
                iTrueCols = datagridview.Columns.Count;   //包含隐藏的列,一共有多少列
                
//求列数,省略Visible = false的列
                for (int i = 0; i < datagridview.Columns.Count; i++)
                {
                    
if (datagridview.Columns[i].Visible) iCols++;
                }
                
string[,] dimArray = new string[iRows + 1, iCols];
                
for (int j = 0, k = 0; j < iTrueCols; j++)
                {
                    
//省略Visible = false的列
                    if (datagridview.Columns[j].Visible)
                    {
                        dimArray[
0, k] = datagridview.Columns[j].HeaderText;
                        k
++;
                    }
                }
                
for (int i = 0; i < iRows; i++)
                {
                    
for (int j = 0, k = 0; j < iTrueCols; j++)
                    {
                        
//省略Visible = false的列
                        if (datagridview.Columns[j].Visible)
                        {
                            
if (datagridview.Rows[i].Cells[j].Value != null)
                            {
                                dimArray[i 
+ 1, k] = datagridview.Rows[i].Cells[j].Value.ToString();
                            }
                            
else
                            {
                                dimArray[i 
+ 1, k] = "";
                            }
                            k
++;
                        }
                    }
                }
                ws.get_Range(ws.Cells[
11], ws.Cells[iRows + 1, iCols]).Value2 = dimArray;
                ws.get_Range(ws.Cells[
11], ws.Cells[1, iCols]).Font.Bold = true;
                ws.get_Range(ws.Cells[
11], ws.Cells[iRows + 1, iCols]).Font.Size = 10.0;
                ws.get_Range(ws.Cells[
11], ws.Cells[iRows + 1, iCols]).RowHeight = 14.25;
                
//ws.Columns[.ColumnWidth = datagridview.Columns[0].Width;
                for (int j = 0, k = 0; j < iTrueCols; j++)
                {
                    
//省略Visible = false的列
                    if (datagridview.Columns[j].Visible)
                    {
                        ws.get_Range(ws.Cells[
1, k + 1], ws.Cells[1, k + 1]).ColumnWidth = (datagridview.Columns[j].Width / 8.4> 255 ? 255 : (datagridview.Columns[j].Width / 8.4);
                        
//ws.Columns.c = datagridview.Columns[j].Width;
                        k++;
                    }
                }
            }
            app.Visible 
= true;
        }
posted @ 2009-06-17 19:53 小末鱼 阅读(1738) | 评论 (0)编辑 收藏
仅列出标题