افتح مشكلة أداء XML SDK V2.0 عند حذف الصف الأول في 20،000+ ملف Excel

StackOverflow https://stackoverflow.com/questions/1878207

سؤال

هل يأتي أي شخص عبر مشكلة في الأداء عند حذف الصف الأول في ملف Excel 20،000+ باستخدام OpenXML SDK V2.0؟

أنا أستخدم ترميز صف الحذف المقترح في مستند SDK Open XML. يستغرق الأمر مني عدة دقائق لحذف الصف الأول باستخدام SDK مفتوح XML، لكنه يستغرق سوى ثانية فقط في excel applicaton.

في النهاية اكتشفت أن رقبة الزجاجة هي في الواقع في نهج الفقاعات في التعامل مع حذف الصف. هناك العديد من الصفوف تحديث بعد الصف المحذوف. لذلك في حالتي، هناك حوالي 20،000 صف يتم تحديثها، وتحول إلى صف البيانات حسب الصف.

أتساءل عما إذا كان هناك طريقة أسرع للقيام بحذف الصف.

هل لدى أي شخص فكرة؟

هل كانت مفيدة؟

المحلول

حسنا، الأخبار السيئة هنا هي: نعم، هذه هي الطريقة التي هو.

قد تحصل على أداء أفضل قليلا تتحرك خارج SDK نفسه System.IO.Packaging وفقط إنشاء IEnumerable/List في مثل LinQ-To-XML من جميع الصفوف، انسخ ذلك إلى جديد IEnumerable/List بدون الصف الأول، أعد كتابة r سمة <row r="?"/> أن تكون مكانا في الفهرس، والكتابة التي تعود إلى الداخل <sheetData/> على الأطفال الحاليين.

كنت بحاجة إلى نوع تفعل الشيء نفسه لأي سلاسل في SharedStrings.xml. ملف - أي إزالة <ssi>.<si> العناصر التي كانت موجودة في الصف الذي تم حذفه، ولكن في هذه الحالة، فهو الآن مفهرسة ضمنيا، لذلك ستتمكن من الابتعاد عن إزالتها مباشرة.

نصائح أخرى

نهج Unzipping الملف، والتلاعب به وإعادة تأييسه هو خطأ في الخطأ.

ماذا عن هذا: إذا قلت، فإنه يعمل بشكل جيد في Excel: هل حاولت استخدام Interop؟ يبدأ هذا مثيل جديد من Excel (إما مرئيا أو غير مرئي)، ثم يمكنك فتح الملف وحذف السطر وحفظ وإغلاق التطبيق مرة أخرى.

using System;
using System.IO;
using Microsoft.Office.Interop.Excel;
using Excel = Microsoft.Office.Interop.Excel;
public void OpenAndCloseExcel() 
{
    Excel.Application excelApp = new Excel.Application();
    // Open Workbook, open Worksheet, delete line, Save
    excelApp.Quit();
}

كائن النطاق مؤهل لأغراض عديدة. أيضا لحذف العناصر. القي نظرة على: MSDN النطاق الوصف. وبعد تلميح آخر: يستخدم Interop Excel، لذلك يجب معالجة جميع الكائنات بمؤشر واحد يستند إليه! لمزيد من الموارد إلقاء نظرة على هذا الخيط stackoverflow.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top