using System.Net; using System.IO; using System.Text.RegularExpressions; private string getHtml(string url, string charSet)//url是要访问的网站地址,charSet是目标网页的编码,如果传入的是null或者"",那就自动分析网页的编码 { WebClient myWebClient = new WebClient(); //创建WebClient实例myWebClient // 需要注意的: //有的网页可能下不下来,有种种原因比如需要cookie,编码问题等等 //这是就要具体问题具体分析比如在头部加入cookie // webclient.Headers.Add("Cookie", cookie); //这样可能需要一些重载方法。根据需要写就可以了 //获取或设置用于对向 Internet 资源的请求进行身份验证的网络凭据。 myWebClient.Credentials = CredentialCache.DefaultCredentials; //如果服务器要验证用户名,密码 //NetworkCredential mycred = new NetworkCredential(struser, strpassword); //myWebClient.Credentials = mycred; //从资源下载数据并返回字节数组。(加@是因为网址中间有"/"符号) byte[] myDataBuffer = myWebClient.DownloadData(url); string strWebData = Encoding.Default.GetString(myDataBuffer); //获取网页字符编码描述信息 Match charSetMatch = Regex.Match(strWebData, "<meta([^<]*)charset=([^<]*)\"", RegexOptions.IgnoreCase | RegexOptions.Multiline); string webCharSet = charSetMatch.Groups[2].Value; if (charSet == null || charSet == "") charSet = webCharSet; if (charSet != null && charSet != "" && Encoding.GetEncoding(charSet) != Encoding.Default) strWebData = Encoding.GetEncoding(charSet).GetString(myDataBuffer); return strWebData; }
这是一片非常好的文章,修改下CSS就可以改变左侧导航栏的样式,在网上找了一些都是要写代码的。怕连接失效,所以直接将文章考了过来,希望作者原谅,如有不妥,请通知一声,我会将文章删掉!
WSS3SDK之:如何定制快速启动的显示样式(转载自Sunmoonfire's artistic matrix)
在母板页里包括了两个控件的模板,这是在现有主页上默认可用的。一个是Microsoft.SharePoint.WebControls.Menu控件,用于在左侧导航区中显示标准的快速启动视图;另一个是Microsoft.SharePoint.WebControls.SPTreeView控件,用于显示站点文件夹视图。我们可以在用户界面上选择究竟显示哪一个视图。
选择在站点页面的左侧导航要显示的视图控件
2、选中启用快速启动,来显示快速启动视图,或者选中启用树视图来显示文件夹视图。
作为一个对左侧导航定制的例子,我们可以把快速启动折叠起来,然后设置Menu控件的属性添加“感应鼠标经过的弹出菜单”(fly-out menu)的方式来显示。这类定制需要我们使用Microsoft Office SharePoint Designer 2007修改default.master,或者创建一个custom.master文件,然后利用对象模型将站点指向新的母版页文件。
使用SharePoint Designer修改default.mater在站点母版页库中的实例来显示带fly-out菜单的折叠视图
2、在母版页库页面中,在下拉菜单中选择在Mirosoft Office SharePoint Designer中编辑。
3、在代码视图里,找到对应的ContentPlaceHolder容器控件,其ID为PlaceHolderLeftNavBar。在PlaceHolderLeftNavBar中,找到AspMenu控件,其ID为QuickLaunchMenu。
4、将Menu控件的StaticDisplayLevels和MaximumDynamicDisplayLevels的值都设为1。如下所示:
id="QuickLaunchMenu"
DataSourceId="QuickLaunchSiteMap"
runat="server"
Orientation="Vertical"
StaticDisplayLevels="1"
ItemWrap="true"
MaximumDynamicDisplayLevels="1"
StaticSubMenuIndent="0"
SkipLinkText=""
>
5、保存文件,打开网站页面查看效果。
在这里附上效果图:
通过创建自定义的母版页文件并使用SharePoint对象模型来显示带fly-out菜单的折叠视图
2、打开新建的myDefault.master文件,找到对应的ContentPlaceHolder容器控件,其ID为PlaceHolderLeftNavBar。
3、在PlaceHolderLeftNavBar中,找到AspMenu控件,其ID为QuickLaunchMenu。然后将StaticDisplayLevels和MaximumDynamicDisplayLevels的值都设为1。如下所示:
id="QuickLaunchMenu"
DataSourceId="QuickLaunchSiteMap"
runat="server"
Orientation="Vertical"
StaticDisplayLevels="1"
ItemWrap="true"
MaximumDynamicDisplayLevels="1"
StaticSubMenuIndent="0"
SkipLinkText=""
>
C#
subSite.MasterUrl = "/Site/SubSite/_catalogs/masterpage/myDefault.master";
由于该代码含有变更内容数据库的操作,所以在运行该代码的.aspx页面里,要有一个Microsoft.SharePoint.WebControls.FormDigest控件(可以放在一个WebPart里运行,Web部件页里自带该控件。也可以在一般的aspx页面中的Form标签中添加该控件,以便在页面中运行该代码)。同时,别忘了引用Microsoft.SharePoint和Microsoft.SharePoint.WebControls命名空间。
5、重启IIS,使变更生效。然后打开网站页面查看效果。
用TreeView替换Menu控件
2、在PlaceHolderLeftNavBar中,找到AspMenu控件,其ID为QuickLaunchMenu。然后将SharePoint:AspMenu的起始标签和结束标签都替换成SharePoint:SPTreeView。
3、移除新SPTreeView元素包含的下列LevelMenuItemStyles元素。
<asp:MenuItemStyle CssClass="ms-navheader"/>
<asp:MenuItemStyle CssClass="ms-navitem"/>
</LevelMenuItemStyles>
<LevelSubMenuStyles>
<asp:SubMenuStyle CssClass="ms-navSubMenu1"/>
<asp:SubMenuStyle CssClass="ms-navSubMenu2"/>
</LevelSubMenuStyles>
SPTreeView控件提供了很多属性,允许我们轻松对其进行定制。
string strCon = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + filePath + ";Extended Properties='Excel 12.0;HDR=NO;IMEX=1';";
System.Data.OleDb.OleDbConnection myConn = new System.Data.OleDb.OleDbConnection(strCon);
myConn.Open();
//获取excel第一标签名
System.Data.DataTable schemaTable = myConn.GetOleDbSchemaTable(System.Data.OleDb.OleDbSchemaGuid.Tables, null);
string tableName = schemaTable.Rows[0][2].ToString().Trim();//标签名
string strCom = "SELECT * FROM [" + tableName + "]";//查询语句
System.Data.OleDb.OleDbDataAdapter myCommand = new System.Data.OleDb.OleDbDataAdapter(strCom, myConn);
//得到自己的DataSet对象
myCommand.Fill(myDataSet);
//关闭此数据链接
myConn.Close();
Excel文件是xlsx格式的2007的
本来是103150122226
用上面的方法读出来就显示成1.0315012223e+011
我说要办法就是在不改动Excel文件的条件啊。因为Excel文件是自动生生的。会有很多不可能一个一个改。
网上找到一个http://www.cnblogs.com/alein/archive/2008/11/04/1326604.html
方法是连接字符串改成string strCon ="Provider=Microsoft.ACE.OleDb.12.0;Data Source=" + FileName + ";Extended Properties='Excel 12.0;HDR=YES;IMEX=1'";
而且HDR必须为YES,如果改成NO即不可用
如果提示未在本地计算机上注册“microsoft.ACE.oledb.12.0”提供程序,说明没有安装office2007
安装一个组件就成了,叫AccessDatabaseEngine 2007 Office system 驱动程序:数据连接组件,下载地址如下
http://www.microsoft.com/downloads/zh-cn/details.aspx?displaylang=zh-cn&FamilyID=7554f536-8c28-4598-9b72-ef94e038c891
需要引用using System.Net.Mail;
方法如下:
public class Mail
{
/// <summary>
/// 发送电子邮件
/// </summary>
/// <param name="MessageFrom">发件人邮箱地址</param>
/// <param name="MessageTo">收件人邮箱地址</param>
/// <param name="MessageSubject">邮件主题</param>
/// <param name="MessageBody">邮件内容</param>
/// <returns></returns>
public static bool Send(MailAddress MessageFrom, string MessageTo, string MessageSubject, string MessageBody)
{
MailMessage message = new MailMessage();
message.From = MessageFrom;
message.To.Add(MessageTo); //收件人邮箱地址可以是多个以实现群发
message.Subject = MessageSubject;
message.Body = MessageBody;
message.IsBodyHtml = false; //是否为html格式
message.Priority = MailPriority.High; //发送邮件的优先等级
SmtpClient sc = new SmtpClient();
sc.Host = "smtp.163.com"; //指定发送邮件的服务器地址或IP
sc.Port = 25; //指定发送邮件端口
//测试账号:zwtest2012@163.com/zwtest20122012 ,随便注册的一个163账号要是自己的可以填自己的
sc.Credentials = new System.Net.NetworkCredential("zwtest2012@163.com", "zwtest20122012"); //指定登录服务器的用户名和密码(发件人的邮箱登陆密码)
try
{
sc.Send(message); //发送邮件
}
catch(Exception ex)
{
//throw(ex);
ExcelDBA.WriteLog("----------------------------");//日志小分割
ExcelDBA.WriteLog("发送邮件到["+MessageTo.ToString()+"]失败!");
ExcelDBA.WriteLog("错误信息:"+ex.Message.ToString());
return false;
}
return true;
}
}
调用如下:
protected void Button1_Click(object sender, EventArgs e)
{
MailAddress MessageFrom = new MailAddress("zwtest2012@163.com"); //发件人邮箱地址 ,与方法里面的发送账号必须一致
string MessageTo = "abc@qq.com"; //收件人邮箱地址
string MessageSubject = "邮件标题标题"; //邮件主题
string MessageBody = "这里是邮件内容内容内容。"; //邮件内容
if (Mail.Send(MessageFrom, MessageTo, MessageSubject, MessageBody))
{
Response.Write("发送邮件成功111" + DateTime.Now.ToString());
}
else
{
Response.Write("发送邮件失败222" + DateTime.Now.ToString());
}
}

