要换Blog程序了
因为和LBS作者交流上的不愉快,我准备更换Blog程序了。
这将是第三次更换Blog程序。
第一次是用的CSDN的Blog系统,因为自己有空间,所以把Blog挪到了自己的网站上,Blog程序是自己开发的,界面模仿.Text Blog的默认界面。
第二次是看到自己写的Blog程序不支持换模板,用的table布局,所以经过仔细挑选之后,采用了LBS。
看来这第三次换Blog程序也快了,刚才在网上找找主流的Blog系统,发现了这么几个:
Drupal 4.6.1 http://www.drupal.org/
Nucleus 3.2 http://www.nucleuscms.org/
WordPress 1.5.1.2 http://wordpress.org/
Bo-Blog 1.7.0108 http://www.bo-blog.com/
oblog 3.0 http://oblog.oioj.net/
bp blog 4.06 http://www.betaparticle.com/
dblog 1.4.1 http://www.dblog.it/
到底选哪个,经过进一步测试之后再下结论吧。
阅读(434 次)
C#简单操作Excel(一)
最近要给客户生成Excel报表,比较麻烦,以前生成是引用的SmartExcel来输出Excel文件,但是输出的文件由于格式较老,缺少很多功能,连单元格合并都不行。所以还是直接引用Excel.dll,来实现完整的Excel控制。
一、首先将Excel.exe复制到C:\里,在命令提示符窗口(cmd.exe)里输入path %path%;C:\Program Files\Microsoft Visual Studio .NET 2003\SDK\v1.1\bin。系统应该没有什么提示。然后输入c:回车,再输入cd\回车,如入tlbimp.exe excel.exe,之后系统会显示详细信息,如果没有出现错误,就会得到一个Excel.dll文件,这个文件就是经过转化的.net下的Excel。tlbimp的详细使用信息,请在命令提示符窗口里直接输入tlbimp。
二、然后打开Microsoft Visual Studio .NET 2003,新建一个C# WinForm工程,然后点击“项目”–“添加引用”,点击“浏览”,选择刚才生成的Excel.dll,再点“确定”。这样就引用了Excel.dll文件。
然后添加两个按钮,分别叫button1和button2,将button1的Text属性设为“简单”;将button2的Text属性设为“复杂”。双击button1,输入以下代码:
Excel.ApplicationClass myex=new Excel.ApplicationClass(); //创建Excel实例 myex.Visible=true; //让Excel窗口可见 //添加一个新的工作表(WorkSheet),参数是模板类型 myex.Workbooks.Add(Excel.XlWBATemplate.xlWBATWorksheet); myex.Cells[1,1]="hi"; //向单元格1,1填写数据
双击button2,添加下面的代码:
Excel.ApplicationClass myex=new Excel.ApplicationClass(); //创建Excel实例
myex.Visible=true; //让Excel窗口可见
//添加一个新的工作表(WorkSheet),参数是模板类型
Excel._Workbook mywb=myex.Workbooks.Add(Excel.XlWBATemplate.xlWBATWorksheet);
Excel._Worksheet myws=(Excel._Worksheet)mywb.Worksheets.get_Item(1); //得到第一张工作表
Excel.Range rg=myws.get_Range("A1","E1"); //创建一个选取范围的实例
string []content=new string[6]; //创建数组
content[0]="’1";
content[1]="’2";
content[2]="’3";
content[3]="’4";
content[4]="’5";
object []args1=new object[1]; //这是下面要引用到的参数数组,该数组仅包含一个元素
args1[0]=content; //设定参数数组第1个元素的内容为上面定义的内容数组
//调用…方法,将各个参数带入,最后两个参数分别为上面创建的“选取范围实例”和“参数数组”
rg.GetType().InvokeMember("Value",BindingFlags.SetProperty,null,rg,args1);
运行程序,分别点击“简单”和“复杂”,来看看这两者实现上的区别。
这样在每点击一次按钮后,系统中就多了一个Excel.exe的进程,当你关闭程序时,这些进程也不会自动消失。解决办法就是在使用完Excel的Application对象后,写入
myex.Quit(); myex=null; GC.Collect();
来关闭Excel进程,并手工进行垃圾收集。如果不用这个方法,直接读取系统进程列表,杀死Excel.exe所对应的进程也可以,不过这样做有一定的危险性,所以最好还是采取上面的办法。
现在能通过C#打开Excel,并能通过两种方式向其中填入数据了。至于保存等操作,下次再说。
本次的完整代码:
using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;
using System.Reflection;
using System.Runtime.InteropServices;
namespace WindowsApplication1
{
/// <summary>
/// Form1 的摘要说明。
/// </summary>
public class Form1 : System.Windows.Forms.Form
{
private System.Windows.Forms.Button button1;
private System.Windows.Forms.Button button2;
/// <summary>
/// 必需的设计器变量。
/// </summary>
private System.ComponentModel.Container components = null;
public Form1()
{
//
// Windows 窗体设计器支持所必需的
//
InitializeComponent();
//
// TODO: 在 InitializeComponent 调用后添加任何构造函数代码
//
}
/// <summary>
/// 清理所有正在使用的资源。
/// </summary>
protected override void Dispose( bool disposing )
{
if( disposing )
{
if (components != null)
{
components.Dispose();
}
}
base.Dispose( disposing );
}
#region Windows 窗体设计器生成的代码
/// <summary>
/// 设计器支持所需的方法 - 不要使用代码编辑器修改
/// 此方法的内容。
/// </summary>
private void InitializeComponent()
{
this.button1 = new System.Windows.Forms.Button();
this.button2 = new System.Windows.Forms.Button();
this.SuspendLayout();
//
// button1
//
this.button1.Location = new System.Drawing.Point(24, 32);
this.button1.Name = "button1";
this.button1.TabIndex = 0;
this.button1.Text = "简单";
this.button1.Click += new System.EventHandler(this.button1_Click);
//
// button2
//
this.button2.Location = new System.Drawing.Point(160, 32);
this.button2.Name = "button2";
this.button2.TabIndex = 1;
this.button2.Text = "复杂";
this.button2.Click += new System.EventHandler(this.button2_Click);
//
// Form1
//
this.AutoScaleBaseSize = new System.Drawing.Size(6, 14);
this.ClientSize = new System.Drawing.Size(292, 266);
this.Controls.Add(this.button2);
this.Controls.Add(this.button1);
this.Name = "Form1";
this.Text = "Form1";
this.ResumeLayout(false);
}
#endregion
/// <summary>
/// 应用程序的主入口点。
/// </summary>
[STAThread]
static void Main()
{
Application.Run(new Form1());
}
private void button1_Click(object sender, System.EventArgs e) //逐个单元格的填入数据
{
Excel.ApplicationClass myex=new Excel.ApplicationClass(); //创建Excel实例
myex.Visible=true; //让Excel窗口可见
//添加一个新的工作表(WorkSheet),参数是模板类型
myex.Workbooks.Add(Excel.XlWBATemplate.xlWBATWorksheet);
myex.Cells[1,1]="hi"; //向单元格1,1填写数据
}
//将数组内容一次性填写到Excel
private void button2_Click(object sender, System.EventArgs e)
{
Excel.ApplicationClass myex=new Excel.ApplicationClass(); //创建Excel实例
myex.Visible=true; //让Excel窗口可见
//添加一个新的工作表(WorkSheet),参数是模板类型
Excel._Workbook mywb=myex.Workbooks.Add(Excel.XlWBATemplate.xlWBATWorksheet);
//得到第一张工作表
Excel._Worksheet myws=(Excel._Worksheet)mywb.Worksheets.get_Item(1);
Excel.Range rg=myws.get_Range("A1","E1"); //创建一个选取范围的实例
string []content=new string[6]; //创建数组
content[0]="’1";
content[1]="’2";
content[2]="’3";
content[3]="’4";
content[4]="’5";
//这是下面要引用到的参数数组,该数组仅包含一个元素
object []args1=new object[1];
//设定参数数组第1个元素的内容为上面定义的内容数组
args1[0]=content;
//调用…方法,将各个参数带入
//最后两个参数分别为上面创建的“选取范围实例”和“参数数组”
rg.GetType().InvokeMember("Value",BindingFlags.SetProperty,null,rg,args1);
}
}
}
阅读(870 次)
Oracle 10g错误:ora-12516 TNS:监听程序找不到匹配协议栈的可用处理程序
前天安装了Oracle 10g,安装时仅安装的软件,没有建库。之后自己建了一个库,实例名叫diamond。然后又建立了一个监听,运行PL/SQL,登陆时出现错误:ora-12516 TNS:监听程序找不到匹配协议栈的可用处理程序。
然后在网上找解决办法,终于在ITPub上找到了解决方法。
修改listener.ora,原来的部分内容为:
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(SID_NAME = PLSExtProc)
(ORACLE_HOME = C:\oracle\product\10.1.0\db_1)
(PROGRAM = extproc)
)
)
现在要修改为:
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(SID_NAME =PLSExtProc)
(ORACLE_HOME = C:\oracle\product\10.1.0\db_1)
(PROGRAM = extproc)
)
(SID_DESC =
(GLOBAL_DBNAME = diamond)
(ORACLE_HOME = C:\oracle\product\10.1.0\db_1)
(SID_NAME = diamond)
)
)
其中的diamond是数据库的实例名。
重新启动一下监听和Oracle数据库,问题解决。
我不了解这段的内容,但从字面上,感觉应该是制定一个具体的实例信息(SID_DESC)
阅读(214 次)
