我想知道我可以做些什么来提高Excel自动化的性能,因为如果你在工作表中有很多事情,它可能会很慢......
这里有一些我发现自己:
ExcelApp.ScreenUpdating = false
- 关闭重绘屏幕
ExcelApp.Calculation = Excel.XlCalculation.xlCalculationManual
- 关闭计算引擎,以便Excel在单元格值更改时不会自动重新计算(在完成后将其重新打开)
减少对Worksheet.Cells.Item(row, col)
和的调用Worksheet.Range
- 我不得不轮询数百个单元格以找到我需要的单元格.实现一些单元格位置的缓存,将执行时间从大约40秒减少到大约5秒.
什么样的互操作会对性能造成严重影响,应该避免?你还能做些什么来避免不必要的处理?
我目前正在尝试使用以下代码将对象数组中的数据写入Excel中的范围,其中objData
只是一个字符串数组:
private object m = System.Type.Missing;
object[] objData = getDataIWantToWrite();
Range rn_Temp;
rn_Temp = (Range)XlApp.get_Range(RangeName, m);
rn_Temp = rn_Temp.get_Resize(objData.GetUpperBound(), 1);
rn_Temp.value2 = objData;
Run Code Online (Sandbox Code Playgroud)
这几乎可以工作,问题是范围被填满但是每个单元格都获得了第一个项目的值objData
.
逆向工作,即
private object m = System.Type.Missing;
object[] objData = new object[x,y]
Range rn_Temp;
rn_Temp = (Range)XlApp.get_Range(RangeName, m);
rn_Temp = rn_Temp.get_Resize(objData.GetUpperBound(), 1);
objData = (object[])rn_Temp.value2;
Run Code Online (Sandbox Code Playgroud)
将返回一个包含工作表中所有值的数组,所以我不确定为什么阅读和赋值的工作方式不同.
有没有人成功地做过这件事?我目前正逐个单元地编写阵列,但它需要处理很多(> 50,000)行,因此非常耗时.
这就是我想要做的.
1.创建excel文件(.xlsx)c://test/files/work1_4.13.14.xlsx,名称为+值(日期)
例如:work1_4.13.14.xlsx
2.将标题设置为文件示例:[名称] [年龄] [城市].
3.我有3个名单,年龄,城市,我需要填写excel表.
这是我的目标
Name Age City
Ben 20 xyz
Jack 25 xyz
Mike 45 zyx
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?
对不起我的英文请.我是开放式xml sdk的新手.我的程序能够将一些数据和DataTable导出到Excel文件(模板)在模板中,我将数据插入到一些占位符中.它的工作非常好,但我也需要插入一个DataTable ...我的示例代码:
using (Stream OutStream = new MemoryStream())
{
// read teamplate
using (var fileStream = File.OpenRead(templatePath))
fileStream.CopyTo(OutStream);
// exporting
Exporting(OutStream);
// to start
OutStream.Seek(0L, SeekOrigin.Begin);
// out
using (var resultFile = File.Create(resultPath))
OutStream.CopyTo(resultFile);
Run Code Online (Sandbox Code Playgroud)
下一个导出方法
private void Exporting(Stream template)
{
using (var workbook = SpreadsheetDocument.Open(template, true, new OpenSettings { AutoSave = true }))
{
// Replace shared strings
SharedStringTablePart sharedStringsPart = workbook.WorkbookPart.SharedStringTablePart;
IEnumerable<Text> sharedStringTextElements = sharedStringsPart.SharedStringTable.Descendants<Text>();
DoReplace(sharedStringTextElements);
// Replace inline strings
IEnumerable<WorksheetPart> worksheetParts = workbook.GetPartsOfType<WorksheetPart>();
foreach (var worksheet in …
Run Code Online (Sandbox Code Playgroud) 我的数据网格视图中有10k行和15列.我想将此数据导出到excel表单o按钮.我已经尝试过以下代码.
private void btExport_Click(object sender, EventArgs e)
{
Microsoft.Office.Interop.Excel._Application app = new Microsoft.Office.Interop.Excel.Application();
Microsoft.Office.Interop.Excel._Workbook workbook = app.Workbooks.Add(Type.Missing);
Microsoft.Office.Interop.Excel._Worksheet worksheet = null;
app.Visible = true;
worksheet = workbook.Sheets["Sheet1"];
worksheet = workbook.ActiveSheet;
for(int i=1;i<dataGridView1.Columns.Count+1;i++)
{
worksheet.Cells[1, i] = dataGridView1.Columns[i-1].HeaderText;
}
for (int i=0; i < dataGridView1.Rows.Count-1 ; i++)
{
for(int j=0;j<dataGridView1.Columns.Count;j++)
{
if (dataGridView1.Rows[i].Cells[j].Value != null)
{
worksheet.Cells[i + 2, j + 1] = dataGridView1.Rows[i].Cells[j].Value.ToString();
}
else
{
worksheet.Cells[i + 2, j + 1] = "";
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
这对我有用, …
我想将.json文件转换为excel.我无法使用c#语言在任何地方找到这些问题的解决方案.任何人都可以帮助我解决这些问题以及确切的解决方案.
我正在用C#编写一个需要导出List<MyObject>
到Excel的程序,我正在使用EPPlus这样做.
我的挑战是我的对象有一个属性:
string Prop1 { get; set; }
Run Code Online (Sandbox Code Playgroud)
并且,我需要导出的值之一具有一个值,例如,其形式为Prop1 = "123E4"
.
挑战在于EPPlus LoadFromCollection
方法将其导出到Excel,但Excel使用科学记数法(Outputted value = 1.23E+06
或1230000
)将其转换为数字.
我已经尝试将整个列设置为.Style.Numberformat.Format = "@"
(以及我能想到的任何其他样式),我甚至尝试在LoadFromCollection
调用方法之前和之后设置样式.
我也尝试在字符串前面添加一个'
字符,但实际上该字符在该列中的每个单元格中保留,然后使得值不正确以进行分析.
我正在玩我的List转换为DataTable以便使用该LoadFromDataTable
方法,但即使这似乎不起作用.
关于如何将其导出为纯文本的任何想法/建议
可能重复:
如何在C#中将DataTable导出到Excel
我的TemplateExcel包含在我的项目中,我想将我的数据表导出到Excel,我想复制并保存这个模板,数据到处都想保存,我该怎么办?
我正在将SQL数据导出到Excel.我目前使用的代码是:
DataTable dt = new DataTable();
// Create sql connection string
string conString = "Data Source=DELL\\SQLSERVER1;Trusted_Connection=True;DATABASE=Zelen;CONNECTION RESET=FALSE";
SqlConnection sqlCon = new SqlConnection(conString);
sqlCon.Open();
SqlDataAdapter da = new SqlDataAdapter("select LocalSKU,ItemName, QOH,Price,Discontinued,CAST(Barcode As varchar(25)) As Barcode,Integer2,Integer3,ISNULL(SalePrice,0.0000)AS SalePrice,SaleOn,ISNULL(Price2,0.0000)AS Price2 from dbo.Inventory", sqlCon);
System.Data.DataTable dtMainSQLData = new System.Data.DataTable();
da.Fill(dtMainSQLData);
DataColumnCollection dcCollection = dtMainSQLData.Columns;
// Export Data into EXCEL Sheet
Microsoft.Office.Interop.Excel.ApplicationClass ExcelApp = new Microsoft.Office.Interop.Excel.ApplicationClass();
ExcelApp.Application.Workbooks.Add(Type.Missing);
int i = 1;
int j = 1;
int s = 1;
//header row
foreach (DataColumn col in dtMainSQLData.Columns) …
Run Code Online (Sandbox Code Playgroud) c# ×8
excel ×5
interop ×2
.net ×1
asp.net ×1
c#-4.0 ×1
copy ×1
datagridview ×1
epplus ×1
export ×1
formatting ×1
openxml ×1
openxml-sdk ×1
performance ×1
vsto ×1