实例介绍
【实例简介】导入文件、列表数据、自定义属性到sharepoint 站点
【实例截图】
【核心代码】
using System;
using System.IO;
using System.Data;
using System.Drawing;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Threading;
using System.Xml;
using System.Xml.Linq;
using NLog;
using NPOI.HSSF;
using NPOI.SS.UserModel;
using Microsoft.SharePoint.Client;
namespace SGM.Portal.RDP.Tool
{
public partial class RdpTool : System.Windows.Forms.Form
{
private Logger logger = LogManager.GetCurrentClassLogger();
private DataTable dataRdpInfo = null;
private ClientContext spClientContext = null;
private Web siteWeb = null;
private readonly string[] _subFolders = new string[] { "01.AFI", "02.PFI", "03.DSI", "04.VPI", "05.CSO", "06.MVR", "07.SORP", "08.EOP" };
public RdpTool()
{
InitializeComponent();
}
/// <summary>
/// 打开数据模板
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btnOpenFile_Click(object sender, EventArgs e)
{
try
{
odlgRdpFile.Filter = "ALL FILE(*.*)|*.*|Excel(*.xls,*.xlsx)|*.xls;*.xlsx";
if (odlgRdpFile.ShowDialog() == DialogResult.OK)
{
var helper = new ExcelHelper(odlgRdpFile.FileName);
txtDataFile.Text = odlgRdpFile.FileName;
dataRdpInfo = helper.ExcelToDataTable("调研项目文档",1);
dgRdpFiles.AutoGenerateColumns = false;
dgRdpFiles.DataSource = dataRdpInfo;
}
}
catch(Exception ex)
{
logger.Error(ex.Message);
MessageBox.Show(ex.Message);
}
}
/// <summary>
/// 开始导入
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btnStartImport_Click(object sender, EventArgs e)
{
try
{
btnStartImport.Enabled = false;
spClientContext = new ClientContext(txtSiteUrl.Text.Trim()) { Credentials = this.CreateNetworkCredential };
siteWeb = spClientContext.Web;
if (dataRdpInfo != null && dataRdpInfo.Rows.Count > 0)
{
tpbImportProcess.Minimum = 0;
tpbImportProcess.Maximum = dataRdpInfo.Rows.Count;
tpbImportProcess.Value = 0;
ParameterizedThreadStart threadStart = new ParameterizedThreadStart(ThreadRdpImport);
Thread threadImport = new Thread(threadStart);
threadImport.Start(dataRdpInfo);
}
}
catch(Exception ex)
{
logger.Error(ex.StackTrace);
MessageBox.Show(ex.Message);
btnStartImport.Enabled = true;
}
}
/// <summary>
/// 异步导入线程
/// </summary>
/// <param name="dtRdpInfo"></param>
private void ThreadRdpImport(object param)
{
try
{
DataTable dtRdpInfo = param as DataTable;
if(dtRdpInfo != null)
{
int stepProgress = 0;
foreach(DataRow rowData in dtRdpInfo.Rows)
{
var result = ImportRdpInfo(rowData);
//导入失败的时候标红显示
if(!result)
{
ShowErrorRow(stepProgress);
}
else
{
ShowSuccessRow(stepProgress);
}
//显示导入进度
ShowImportProgress( stepProgress);
}
}
}
catch(Exception ex)
{
if(ex.InnerException != null)
{
logger.Error(ex.Message);
logger.Error(ex.InnerException.StackTrace);
}
else
{
logger.Error(ex.StackTrace);
}
}
finally
{
btnStartImport.Invoke(new Action(() =>
{
btnStartImport.Enabled = true;
}));
MessageBox.Show("Import complete!", "Data Import", MessageBoxButtons.OK);
}
}
/// <summary>
/// 导入一行数据
/// </summary>
/// <param name="rowData"></param>
/// <returns></returns>
private bool ImportRdpInfo(DataRow rowData)
{
bool opResult = false;
try
{
//导入车型项目
var segment = rowData["Segment"].ToString();
var brand = rowData["Brand"].ToString();
var platform = rowData["Platform"].ToString();
var program = rowData["Program"].ToString();
if (program == "") return false;
List projectList = siteWeb.Lists.GetByTitle("Program");
//首先判断是否存在车型项目
ListItemCollection projectListItems = projectList.GetItems(CamlQuery.CreateAllItemsQuery());
spClientContext.Load(projectListItems, eachItem => eachItem.Include(
item => item,
item => item.DisplayName));
spClientContext.ExecuteQuery();
var checkItem = projectListItems.Where(x => x.DisplayName == program).SingleOrDefault();
if (checkItem == null)
{
ListItemCreationInformation createProgramInfo = new ListItemCreationInformation();
var newProjectItem = projectList.AddItem(createProgramInfo);
newProjectItem.ParseAndSetFieldValue("Segment", segment);
newProjectItem.ParseAndSetFieldValue("Brand", brand);
newProjectItem.ParseAndSetFieldValue("Platform", platform);
newProjectItem.ParseAndSetFieldValue("Title", program);
newProjectItem.Update();
spClientContext.ExecuteQuery();
}
List programList = siteWeb.Lists.GetByTitle(program);
if (programList == null)
{
logger.Error("Program-{0} has not been created!", program);
return false;
}
Folder projectFolder = programList.RootFolder;
spClientContext.Load(programList);
spClientContext.ExecuteQuery();
if(projectFolder != null)
{
//调研项目
var section = rowData["节点"].ToString();
foreach(string item in _subFolders)
{
if(item.IndexOf(section) > -1)
{
section = item;
break;
}
}
var researchlib = rowData["Clinic Name"].ToString();
var fieldValues = new List<KeyValuePair<string, object>>();
fieldValues.Add(new KeyValuePair<string, object>("Clinic Name", rowData["Clinic Name"]));
fieldValues.Add(new KeyValuePair<string, object>("Milestone", rowData["Milestone"]));
fieldValues.Add(new KeyValuePair<string, object>("Clinic Stimuli", rowData["Clinic Stimuli"]));
fieldValues.Add(new KeyValuePair<string, object>("Clinic Month", rowData["Clinic Month"]));
fieldValues.Add(new KeyValuePair<string, object>("DataSource", rowData["Data Source"]));
fieldValues.Add(new KeyValuePair<string, object>("Vendor", rowData["Vendor"]));
fieldValues.Add(new KeyValuePair<string, object>("PRNO", rowData["PRNO"]));
fieldValues.Add(new KeyValuePair<string, object>("Budget", rowData["budget"]));
fieldValues.Add(new KeyValuePair<string, object>("Actural Expense", rowData["actural expense"]));
fieldValues.Add(new KeyValuePair<string, object>("WBS", rowData["WBS"]));
fieldValues.Add(new KeyValuePair<string, object>("Cities", rowData["城市"]));
fieldValues.Add(new KeyValuePair<string, object>("Competitor", rowData["竞品"]));
var ret = SPClientHelper.CreateResearchLibFolder(spClientContext, program, section, researchlib, fieldValues);
if (ret)
{
//上传文档
var fileName = rowData["文件"].ToString();
if(!string.IsNullOrEmpty(fileName))
{
var researchlibFile = fileName;
if (!System.IO.File.Exists(fileName))
{
researchlibFile = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, fileName);
if (!System.IO.File.Exists(researchlibFile))
{
researchlibFile = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, program, section, researchlib, fileName);
if (!System.IO.File.Exists(researchlibFile))
{
FileInfo fi = new FileInfo(txtDataFile.Text);
researchlibFile = Path.Combine(fi.Directory.FullName, fileName);
}
}
}
if (System.IO.File.Exists(researchlibFile))
{
//上传到调研文档库
Folder researchLibFolder = SPClientHelper.GetFolder(spClientContext, program "/" section "/" researchlib);
logger.Debug("upload file to researchLibFolder:{0}", program "/" section "/" researchlib);
FileInfo fileInfo = new FileInfo(researchlibFile);
string property = string.Empty;
string language = string.Empty;
if (rowData["Property"] != null) property = rowData["Property"].ToString();
if (rowData["Language"] != null) language = rowData["Language"].ToString();
SPClientHelper.UploadFileToFolderByFileStream(spClientContext,
researchLibFolder,
researchlibFile,
fileInfo.Extension,
property,
language);
}
}
}
//提交更新
spClientContext.ExecuteQuery();
opResult = ret;
}
}
catch(Exception ex)
{
logger.Error("ImportRdpInfo:{0}", ex.StackTrace);
}
return opResult;
}
/// <summary>
/// 显示导入进度
/// </summary>
/// <param name="stepProgress"></param>
private void ShowImportProgress(int stepProgress)
{
this.Invoke(new Action( () =>
{
if(stepProgress <= tpbImportProcess.Maximum && stepProgress >= tpbImportProcess.Minimum)
{
tpbImportProcess.Value = stepProgress;
}
}));
}
private void ShowSuccessRow(int rowIndex)
{
this.Invoke(new Action(() =>
{
this.dgRdpFiles.Rows[rowIndex].DefaultCellStyle.BackColor = Color.Green;
}));
}
private void ShowErrorRow(int rowIndex)
{
this.Invoke(new Action(() =>
{
this.dgRdpFiles.Rows[rowIndex].DefaultCellStyle.BackColor = Color.Red;
}));
}
private System.Net.NetworkCredential CreateNetworkCredential
{
get
{
return new System.Net.NetworkCredential(this.txtLoginName.Text, this.txtPassword.Text, this.txtDomain.Text);
}
}
private void RdpTool_Load(object sender, EventArgs e)
{
#if DEBUG
//测试
try
{
#if false
spClientContext = new ClientContext(txtSiteUrl.Text.Trim()) { Credentials = this.CreateNetworkCredential };
SPClientHelper.GetCityLookupId(spClientContext, "上海");
//项目列表
List projectList = siteWeb.Lists.GetByTitle("Program");
//首先判断是否存在车型项目
CamlQuery myCamlQuery = new CamlQuery();
ListItemCollection myListItems = projectList.GetItems(myCamlQuery);
spClientContext.Load(myListItems);
spClientContext.ExecuteQuery();
foreach (ListItem item in myListItems)
{
logger.Debug("Segment:{0},Brand:{1},Platform:{2},Program:{3}", item["Segment"], item["Brand"], item["Platform"], item["Program"]);
}
var fieldValues = new List<KeyValuePair<string, string>>();
fieldValues.Add(new KeyValuePair<string, string>("City", "上海"));
fieldValues.Add(new KeyValuePair<string, string>("Milestone", "Milestone1111"));
fieldValues.Add(new KeyValuePair<string, string>("Clinic Name", "Clinic Name111"));
fieldValues.Add(new KeyValuePair<string, string>("Clinic Month", "9月"));
fieldValues.Add(new KeyValuePair<string, string>("Vendor", "Vendor2222"));
//SPClientHelper.CreateResearchLibFolder(spClientContext, "DU12345", "AFI", "调研项目2", fieldValues);
Folder folder = SPClientHelper.GetFolder(spClientContext,"Documents/DU12345/AFI/调研项目2");
SPClientHelper.UploadFileToFolderByFileStream(spClientContext, folder, @"C:\LineType.cs" , "*.cs");
spClientContext.ExecuteQuery();
#endif
}
catch(Exception ex)
{
logger.Error(ex.Message);
MessageBox.Show(ex.Message);
}
#endif
}
private void txtDomain_Click(object sender, EventArgs e)
{
tipForControl.SetToolTip(sender as Control,"System Domain");
}
private void txtLoginName_Click(object sender, EventArgs e)
{
tipForControl.SetToolTip(sender as Control, "User Account");
}
private void txtPassword_Click(object sender, EventArgs e)
{
tipForControl.SetToolTip(sender as Control, "Password");
}
}
}
标签: 文件 SharePoint 导入 Excel
小贴士
感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。
- 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
- 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
- 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
- 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。
关于好例子网
本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明


网友评论
我要评论