سؤال

أحاول إنشاء خلايا تنسيق مزدوجة وأرقام في Excel باستخدام مكتبة NPOI. لقد استخدمت رمز مثل

Dim cell As HSSFCell = row.CreateCell(j)
cell.SetCellValue(Double.Parse(dr(col).ToString))

في أرقام Excel تتوافق بشكل صحيح ولكن عندما أتحقق من التنسيق ، فإنه يظهر في "عام"

alt text

ثم قمت بتغيير الكود الخاص بي إلى ما يلي

 Dim cell As HSSFCell = row.CreateCell(j)
 cell.SetCellValue(Double.Parse(dr(col).ToString))
 Dim cellStyle As HSSFCellStyle = hssfworkbook.CreateCellStyle
 cellStyle.DataFormat = HSSFDataFormat.GetBuiltinFormat("#,#0.0")
 cell.CellStyle = cellStyle

ثم أثناء فتح الملف ، فإنه يعطي خطأ ويستغرق وقتًا طويلاً لفتحه. لكن تنسيق Excel يظهر في "الرقم"

خطأ عرض كما هو موضح أدناه.

alt text

كيف يمكن اصلاح هذا؟

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

المحلول

ألق نظرة على هذه, ، هل تقوم بإنشاء كائن خلوي لكل خلية؟ إذا كان الأمر كذلك ، فلا تفعل ذلك. حاول إنشاء اثنين من الأنماط فقط قبل إنشاء خلاياك ثم تطبيق هذه الأنماط المحددة مسبقًا على الخلايا التي تنشئها.

نصائح أخرى

Hare هي طريقة بسيطة لإنشاء تنسيق مزدوج في مستند Excel باستخدام NPOI.

//make NUMERIC Format in Excel Document // Author: Akavrelishvili
  var eRow = sheet.CreateRow(rowIndex); //create new Row , rowIndex - it's integer, like : 1,2,3
  eRow.CreateCell(0).SetCellValue(row["ProvidName"].ToString()); //create cell and set string value

  double Amount = Convert.ToDouble(row["Amount"].ToString()); //convert string to double
  eRow.CreateCell(1).SetCellValue(Amount); // create cell and set double value.

هذا هو إصدار العمل ، لقد استخدمته الكثير من المشاريع.

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

     //make Date Time Format in Excel Document // Author: Akavrelishvili

var erow = sheet.createrw (rowindex) ؛ // إنشاء صف جديد // ROWINDEX - إنه عدد صحيح ، مثل: 1،2،3

 ICellStyle cellDateStyle = workBook.CreateCellStyle(); //create custom style
 cellDateStyle.DataFormat = workBook.CreateDataFormat().GetFormat("dd/mm/yyyy"); //set day time Format

 eRow.CreateCell(3).SetCellValue(Convert.ToDateTime(row["Date"])); //set DateTime value to cell
                    eRow.GetCell(6).CellStyle = cellDateStyle; // Restyle cell using "cellDateStyle"


I hope it helps

لإصلاح الكثير من أنماط الخلايا المختلفة ، تعلن جميع الأنماط خارج أي حلقة قد تكون تعمل.

أفترض أنك "J" ستكون العداد ، لذا سأسقط ما كان لديك بتنسيق مصحح لك.

Dim cellStyle As HSSFCellStyle = hssfworkbook.CreateCellStyle
cellStyle.DataFormat = HSSFDataFormat.GetBuiltinFormat("#,#0.0")

For col = 0 To ColoumCounter
  For j = 0 To Counter
    Dim cell As HSSFCell = row.CreateCell(j)
    cell.SetCellValue(Double.Parse(dr(col).ToString))
    cell.CellStyle = cellStyle
  Next
Next

يجب أن يعمل هذا بشكل أفضل قليلاً ، عن طريق الحد من عدد الأنماط "الجديدة".

قم بإنشاء نمط بعد ذلك ولكن هذا النمط للعمود

 ICellStyle _TextCellStyle = wb1.CreateCellStyle();

 _TextCellStyle.DataFormat = wb1.CreateDataFormat().GetFormat("@");
 sheet.SetDefaultColumnStyle(2, _TextCellStyle);
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top