-2

Excel シートから SharePoint 2007 リストにデータをインポートするプログラムを作成しました。約 11000 のデータがインポートされます。以下のコードを使用しました。私のクエリは、「従業員の表示名」を「作成者」列に入れたいということです。そして、コードのExcelシートnで同じものを提供しています。しかし、データがインポートされた後、作成者列に名前が反映されている従業員データはほとんどないことがわかります。ただし、EMPID のみまたは EMPID + 名前を反映するものはほとんどありません。コードをデバッグします表示するには正しい文字列が必要ですが、そのような結果が得られることを理解していませんでした。また、サーバーではなく自分のマシンでプログラムを実行しているので、これは bcoz です。テストサーバーを使用しているため、本番環境にのみ展開します。

コード:

protected void btnImport_Click(object sender, EventArgs e)

        {



            using (SPSite site = new SPSite("URL"))

            {

                using (SPWeb web = site.OpenWeb())

                {

                    webapp = web.Site.WebApplication;

                    webapp.FormDigestSettings.Enabled = false;

                    SPList list = web.Lists["List name"];



                    string connString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=D:\\Test.xlsx;Extended Properties=Excel 12.0";

                    OleDbConnection oledbConn = new OleDbConnection(connString);

                    oledbConn.Open();

                    OleDbCommand cmd = new OleDbCommand("SELECT * FROM [Sheet1$]", oledbConn);//contents from sheet1 is selected

                    OleDbDataAdapter oleda = new OleDbDataAdapter();

                    oleda.SelectCommand = cmd;

                    DataSet ds = new DataSet();

                    oleda.Fill(ds, "Employees");

                    DataTable dt = ds.Tables["Employees"];

                    DataView dv = new DataView(dt);

                    SPSecurity.RunWithElevatedPrivileges(delegate()

                    {

                        using (SPSite elevatedSite = new SPSite("URL"))

                        {

                            elevatedRootWeb = elevatedSite.OpenWeb();

                        }

                    });

                    foreach (DataRowView drv in dv)

                    {

                        EMPID = drv["Emp id"].ToString();

                        DispName = drv["Name"].ToString();

                        Title = drv["Title"].ToString();

                        getid = new SPQuery();

                        getid.Query = "<Where><Eq><FieldRef Name=’EMPID’ /><Value Type='Text'>" + EMPID + "</Value></Eq></Where><OrderBy><FieldRef Name='ID'/></OrderBy>";

                        check = list.GetItems(getid).GetDataTable();

                        if (check == null)

                        {

                                try

                                {





                                    elevatedRootWeb.AllowUnsafeUpdates = true;

                                    UserItem = list.Items.Add();

                                    UserItem["Emp id"] = EMPID;

                                    UserItem["Title"] = Title;

                                    test = elevatedRootWeb.EnsureUser(PSNumber).ID + ";#" + DispName;

                                    UserItem["Author"] = test;

                                    UserItem.Update();

                                    list.Update();

                                    count++;

                                    elevatedRootWeb.AllowUnsafeUpdates = false;



                                    using (StreamWriter w = File.AppendText("D:\\Errorlog_SP2010.txt"))

                                    {

                                        Log(PSNumber + "Inserted successfully", w);



                                        w.Close();

                                    }

                                }

                                catch (Exception ex)

                                {

                                    HttpContext.Current.Response.Write("<script>alert('Exception on adding item " + ex.Message + "')</script>");

                                    using (StreamWriter w = File.AppendText("D:\\Errorlog_SP2010.txt"))

                                    {

                                        Log(ex.ToString()+ PSNumber, w);



                                        w.Close();

                                    }


                                }

                        }
4

1 に答える 1

0

「_catalogs/users/simple.aspx」リストをチェックして、そのサイトのユーザーの情報が正しく保存されているかどうかを確認してください。

作成者フィールドは、設定した値ではなく、このリストに表示されている値から値を取得するため、これは重要です。

これを修正する方法については、この質問を参照してください。

于 2012-10-07T23:11:13.207 に答える